vue项目接口域名动态的获取方法
581
2022-08-26
Python磨刀篇|函数参数、星号、斜杠等用法总结(python输出斜杠)
一、作为乘法或者是乘幂运算符
在Python中,*表示乘法,**表示次方,这个不必多说。
函数作为Python的一等公民,其参数的类型也非常丰富。下面结合参数类型,我们来看一下*的灵活作用。
另外,也有如下专门的特殊字符串连接用法:
print(3*"Hello ")
结果是输出依次由*符号3个后面字符串组成的长字符串。
二、函数参数——位置实参
按照参数位置,依次传递参数,这是最普通的方式(大多数语言中都支持)。
def location(a, b)print(a + b)location(3, 9)
小结:调用函数时,按顺序传递参数,3 传给 a,9 传给 b。调用时,不能缺少实参。
三、函数参数——关键字实参
如果不想严格按照顺序传递参数,也可以按关键字名称传递。举例如下:
def location(a, b)print(a + b)location(b = 3, a = 9)
注意:调用上面函数时,按关键字名称传递参数,3 传给 b,9 传给 a。也不能缺少调用实参。
四、函数参数——缺省参数
定义函数时,可以给某个参数赋值一个默认值,具有默认值的参数就叫做缺省参数。
调用函数时,如果没有传入缺省参数 的值,则在函数内部使用参数默认值。将常见的值设置为参数的缺省值,从而简化函数的调用。要使用最常见的值作为默认值。如果一个参数的值不能确定,则不应该设置默认值,具体的数值在调用函数时,由外界传递!
例如:对列表排序的方法
gl_num_list = [6, 3, 9]
默认就是升序排序,因为这种应用需求更多。
gl_num_list.sort()print(gl_num_list)
只有当需要降序排序时,才需要传递 'reverse' 参数。
gl_num_list.sort(reverse=True)print(gl_num_list)
注意:缺省参数的定义位置:
必须保证带有默认值的缺省参数在参数列表末尾!
调用带有多个缺省参数的函数:
在调用函数时,如果有多个缺省参数,需要指定参数名,这样解释器才能够知道参数的对应关系!
def print_info(name, title="", gender=True): gender_text = "男生"if not gender: gender_text = "女生"print("%s%s 是 %s" % (title, name, gender_text))# 提示:在指定缺省参数的默认值时,应该使用最常见的值作为默认值!print_info("小明")print_info("老王", title="班长")print_info("小美", gender=False)
再看下面的例子:
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
五、多值参数
当函数需要处理的参数个数不确定时,可使用多值参数。python中有两种多值参数:
接收元组:参数名前加一个*接收字典:参数名前加两个*
从众多一流开源库源码分析来看,一般在给多值参数命名时,习惯使用以下两个名字:
*args — 存放元组参数**kwargs — 存放字典参数(kw即keyword,kwargs即键值对参数)
def demo(num, *args, **kwargs): print(num) print(args) print(kwargs)demo(1, 2, 3, 4, 5, name="小明", age=18, gender=True)
输出:1
1(2, 3, 4, 5){'name': '小明', 'age': 18, 'gender': True}
拆包:在上面多值参数传递时,实际上使用了拆包功能。拆包主要用于元组和字典参数的传递。在调用带有多值参数的函数时,Python使用拆包简化参数的传递:
直接将一个元组变量实参传递给元组形参args在元组变量前,加*直接将一个字典变量实参传递给字典形参kwargs在字典变量前,加**
def demo(*args, **kwargs):print(args)print(kwargs)gl_nums = (1, 2, 3)gl_xiaoming = {"name": "小明", "age": 18}
注意:变量名前必须要加*号,否则不能无法正常拆包!
六、更复杂的应用情形
例1:函数参数中独立的斜杠
例1:在很多Python内置类中经常见到如下内容:
__init__(self, /, *args, **kwargs)
说明:如果你想要函数的调用者:
在某个参数位置只能使用位置参数而不能使用关键字参数传参,那么你只需要在所需位置后面放置一个/
举例:
def f1(a, b, /): return a + b
对于上面这个函数而言,调用f1时参数a,b只能是特定的值,而不能以关键字传参,即f1(2, 3)执行正确而f1(a=2, 3)和f1(2, b=3)将执行错误。其实,上面第一个例子就是极为典型的应用场景,即不能使用__init__(self=......)这种表达方式。
例2:便于阅读
def plot(*args, scalex=True, scaley=True, data=None, **kwargs)
本例中,为了便于阅读,最好在元组参数与字典参数中间间隔以可能的其他参数,这个示例中使用缺省参数作为间隔,具有较强阅读性。在许多第三方Python库中普遍见到,说明这是一种重要的典型的应用方案!
例3:函数参数中独立的*号
请看下面的示例:
def barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
python函数参数中间有一个(*)分隔,这指明:
星号后面为命名关键字参数,星号自己不是参数。命名关键字参数,在函数调用时必须带参数名字进行调用!
在许多第三方Python库中普遍见到,说明这是一种重要的典型的函数参数使用方案!
例4:函数定义中的三个点(...)
python函数参数中的三个点(...)用于作为默认参数。
def f(a:int=...): print(a)
调用及显示:
In [4]: f()EllipsisIn [5]: f("Hello")HelloIn [6]: f(99999)99999In [7]: f([1,2,3,4,5])[1, 2, 3, 4, 5]In [8]: f(...)EllipsisIn [9]: f(Ellipsis)Ellipsis
大家可以结合缺省参数一起学习这里...的用法。在许多第三方Python库中普遍见到,说明这是一种重要的典型的应用方案!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~