(小甲鱼python)函数笔记合集二 函数(II)总结 函数的几种参数 位置参数、关键字参数、默认参数等

一、基础复习

函数的基本用法 创建和调用函数 函数的形参与实参等等

二、函数的几种参数

1.位置参数
一般情况下实参是按照形参定义的顺序进行传递的,而Python中位置固定的参数我们称为位置参数。

>>> def myfunc(s,vt,o):
	return "".join((o,vt,s))      #颠倒顺序组成字符串并返回

>>> myfunc("我","打了","小甲鱼")       
'小甲鱼打了我'
>>> myfunc("小甲鱼","打了","我")
'我打了小甲鱼'

扩展:函数.join()用法: 将序列(也就是字符串、元组、列表、字典)中的元素以指定的字符连接生成一个新的字符串。

>>> a=["我","打了","小鲫鱼"]  # 列表使用‘空格’作为分隔符
>>> print(" ".join(a))
我 打了 小鲫鱼
>>> print("".join(a))  # 结果
我打了小鲫鱼
>>> 

a='I love China !'      #字符串使用‘空格’作为分隔符
print(' '.join(a))

I   l o v e   C h i n a   !      # 结果

a=('I','love','China','!')        #元祖使用‘空格’作为分隔符
print(' '.join(a))

I love China !        # 结果

a={"I":1,'love':2,'China!':3}         #字典使用‘空格’作为分隔符
print(' '.join(a))

I love China!    # 字典有时结果不一样的原因:字典的读取是随机的结果

2.关键字参数
使用关键字参数只需要知道参数的名字即可。

>>> def myfunc(s,vt,o):
	return "".join((o,vt,s))

>>> myfunc(o="我",vt="打了",s="小甲鱼")
'我打了小甲鱼'

如果同时使用位置参数和关键字参数,则它们的位置需要注意一下,位置参数必须在关键字参数之前,否则会出错。

>>> def myfunc(s,vt,o):
	return "".join((o,vt,s))
>>> myfunc(o="我","清蒸","小甲鱼")   #位置参数必须在关键字参数之前,
SyntaxError: positional argument follows keyword argument
>>>
>>> myfunc("我","清蒸",o="小甲鱼")
'小甲鱼清蒸我'

3.默认参数
Python允许函数参数在定义的时候就指定默认值的,这样的话,在函数调用的时候,如果没有传入实参,就会采用默认的参数来代替。如果使用默认参数,则将其放到最后。

>>> def myfunc(s,vt,o="小甲鱼"):
	return "".join((o,vt,s))

>>> myfunc("香蕉","吃")
'小甲鱼吃香蕉'
>>> myfunc("香蕉","吃","小鲫鱼")  #第三个参数如果赋值,就会覆盖默认值。
'小鲫鱼吃香蕉'

>>> def myfunc(s="苹果",vt,o="小甲鱼"):  #如果使用默认参数,则将其放到最后。
	return "".join((o,vt,s))
SyntaxError: non-default argument follows default argument

>>> def myfunc(vt,s="苹果",o="小甲鱼"):  #正确写法,默认参数放最后。
	return "".join((o,vt,s))

>>> myfunc("喜欢吃")
'小甲鱼喜欢吃苹果'

三、help()函数冷门用法

1.help()函数与abs()和sum()联用讲解关键字参数
通过观察abs(x, /)中反斜杠的位置来判断关键字参数。主要看第二点help()函数与sum()函数联用讲解关键字参数。

斜杠的意思为斜杠左侧的参数,它必须传递位置参数,而不能是关键字参数

>>> help(abs)    
Help on built-in function abs in module builtins:

abs(x, /)
    Return the absolute value of the argument.

abs()函数求绝对值
举例:

>>> abs(-1.5)
1.5
>>> abs(x=1.5)    # abs(x, /)斜杠左侧必须为位置参数。
Traceback (most recent call last):
  File "<pyshell#37>", line 1, in <module>
    abs(x=1.5)
TypeError: abs() takes no keyword arguments

2.help()函数与sum()函数联用讲解关键字参数

  • python版本号3.7.3使用help()查看sum()函数的用法,显示sum(iterable, start=0, /),其中反斜杠在最后面,
>>> help(sum)
Help on built-in function sum in module builtins:

sum(iterable, start=0, /)
    Return the sum of a 'start' value (default: 0) plus an iterable of numbers
    
    When the iterable is empty, return the start value.
    This function is intended specifically for use with numeric values and may
    reject non-numeric types.
  • python3.9.9版本关于sum函数的用法显示sum(iterable, /,start=0)

斜杠的意思为斜杠左侧的参数,它必须传递位置参数,而不能是关键字参数

python版本不同,sum函数中反斜杠的位置不同。
在这里插入图片描述这里举例使用 python版本3.9.9sum(iterable, /,start=0)这种用法来讲解:

>>> sum([1,2,3],4)  #左侧只能使用位置参数,右侧位置参数和关键字参数都可以。
10
>>> sum([1,2,3],strat=4)
10

自定义函数也是遵从这一语法:左侧只能使用位置参数,右侧位置参数和关键字参数

def abc(a,/,b,c):
    print(a,b,c)

>>> abc(1,2,3)
1 2 3
>>> abc(a=1,2,3)  #斜杠左侧只能使用位置参数
SyntaxError: positional argument follows keyword argument

>>> abc(3,b=2,c=1)
3 2 1

只能使用关键字参数的语法: 用星号*
星号的左侧既可以是位置参数,也可以是关键字参数,右侧只能是关键字参数。

>>> def abc(a,*,b,c):
	print(a,b,c)

>>> abc(1,2,3)     # 右侧只能是关键字参数
Traceback (most recent call last):
  File "<pyshell#51>", line 1, in <module>
    abc(1,2,3)
TypeError: abc() takes 1 positional argument but 3 were given
>>> abc(1,b=2,c=3)
1 2 3
>>> abc(a=1,b=2,c=3)
1 2 3
>>> 

课后题:
1.如果一个函数要求传递位置参数,那么颠倒实参的顺序,肯定会报错,是吗?
答:也不一定。
解析:比如 min() 或者 max() 函数,参数顺序没有要求。
2.默认参数跟关键字参数有啥区别?
答:位置不同,默认参数是存在于函数定义中的,而关键字参数是在函数调用中发挥作用。
解析:在函数定义的时候,使用等号(=)来表示默认参数,默认参数的优点是如果没有传入实参,那么将采用默认的参数值代替;在函数调用的时候,使用等号(=)来表示关键字参数,关键字参数的优点是不需要顾虑参数的传递顺序(除非在定义中有 “特殊” 的声明)。
3.任何支持传递位置参数的函数,都可以使用关键字参数吗?
答:也不全是。
解析:见下题解析。
4.请问下面代码是否会报错,为什么?

>>> def abc(a, /, b, c):
...     print(a, b, c)
...
>>> abc(a=3, b=2, c=1)
# 请问这里会报错吗?

答:会报错!
解析:在函数的定义中出现斜杠(比如 abs(x, /)),表示在其左侧的参数必须传递位置参数,而不能是关键字参数(右侧则无所谓)。

>>> abs(x = -250)
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    abs(x = -250)
TypeError: abs() takes no keyword arguments

咱们自己定义函数,也是遵从这么一个语法:

>>> def abc(a, /, b, c):
...     print(a, b, c)
... 
>>> abc(1, 2, 3)
1 2 3
>>> abc(a=3, b=2, c=1)
Traceback (most recent call last):
  File "<pyshell#82>", line 1, in <module>
    abc(a=3, b=2, c=3)
TypeError: abc() got some positional-only arguments passed as keyword arguments: 'a'
>>> abc(3, b=2, c=1)
3 2 1

题目来自小甲鱼函数II

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值