Python磨刀篇|函数参数、星号、斜杠等用法总结(python输出斜杠)

网友投稿 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小时内删除侵权内容。

上一篇:Python从门到精通(九):Grpc实现(grpc python)
下一篇:【Python爬虫】解析百科地址(python爬虫百度贴吧)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~