鱼C论坛

 找回密码
 立即注册
查看: 6879|回复: 19

[知识点备忘] 第042讲:函数(II)

[复制链接]
发表于 2021-12-9 23:10:59 | 显示全部楼层 |阅读模式
购买主题 已有 25 人购买  本主题需向作者支付 5 鱼币 才能浏览
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-10 16:58:25 | 显示全部楼层
函数的参数有很多种玩法,包括位置参数、关键字参数、默认参数。其中,在调用函数时,位置参数必须在关键字参数之前;在定义函数时,默认参数要放在最后。另外还有两个“冷知识”:定义函数时,斜杠“/”限制位置参数,即斜杠左侧的参数必须传递位置参数,而不能传递关键字参数(斜杠右侧的参数随意);星号“*”限制关键字参数,即星号右侧的参数必须传递关键字参数,而不能传递位置参数(星号左侧的参数随意)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-12-30 14:29:43 | 显示全部楼层
>>> ['函数的参数']
['函数的参数']
>>> ['1--位置参数']
['1--位置参数']

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

>>> myfunc("我","打了","小甲鱼")
'小甲鱼打了我'
>>> myfunc("小甲鱼","打了","我")
'我打了小甲鱼'
>>> ['2--关键字参数']
['2--关键字参数']
>>> myfunc(o="我",vt="打了",s="小甲鱼")
'我打了小甲鱼'
>>> myfunc(o="我","清蒸","小甲鱼")
SyntaxError: positional argument follows keyword argument
>>> ['位置参数必须在关键字参数之前']
['位置参数必须在关键字参数之前']
>>> myfunc("我","清蒸了",s="小甲鱼")
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    myfunc("我","清蒸了",s="小甲鱼")
TypeError: myfunc() got multiple values for argument 's'
>>> myfunc("我","清蒸了",o="小甲鱼")
'小甲鱼清蒸了我'
>>> ['默认参数--在函数调用时如果没有采用实参,那么在函数调用时就会采用默认参数来代替']
['默认参数--在函数调用时如果没有采用实参,那么在函数调用时就会采用默认参数来代替']
>>> def myfunc(s,vt,o="小甲鱼"):
        return "".join((o,vt,s))

>>> myfunc("香蕉","吃")
'小甲鱼吃香蕉'
>>> myfunc("香蕉","吃","不二如是")
SyntaxError: invalid character ',' (U+FF0C)
>>> myfunc("香蕉","吃","不二如是")
'不二如是吃香蕉'
>>> ['当给了一个实参之后,就不会使用默认参数']
['当给了一个实参之后,就不会使用默认参数']
>>> def myfunc(s="苹果",vt,o="小甲鱼"):
        
SyntaxError: non-default argument follows default argument
>>> def myfunc(s="苹果",vt,o="小甲鱼"):
        
SyntaxError: non-default argument follows default argument
>>> ['这是因为默认参数也要滞后']
['这是因为默认参数也要滞后']
>>> def myfunc(vt,s="苹果",o="小甲鱼"):
        return "".join((o,vt,s))

>>> myfunc("爱吃")
'小甲鱼爱吃苹果'
>>> help(abs)
Help on built-in function abs in module builtins:

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

>>> abs(-1.5)
1.5
>>> abs(x=-1.5)
Traceback (most recent call last):
  File "<pyshell#30>", line 1, in <module>
    abs(x=-1.5)
TypeError: abs() takes no keyword arguments
>>> [' abs(x,/)  中 /  的含义是斜杠的左边的参数必须传递位置参数,而不能是一些关键字参数之类']
[' abs(x,/)  中 /  的含义是斜杠的左边的参数必须传递位置参数,而不能是一些关键字参数之类']
>>> sum([1,2,3],4)
10
>>> sum([1,2,3],start=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,b=2,c=3)
1 2 3
>>> abc(1,2,3)
Traceback (most recent call last):
  File "<pyshell#46>", line 1, in <module>
    abc(1,2,3)
TypeError: abc() takes 1 positional argument but 3 were given
>>> abc(a=1,b=2,c=3)
1 2 3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2022-4-27 07:39:19 | 显示全部楼层
楼上的同学很赞。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-16 16:07:05 | 显示全部楼层
def myfunc(s,vt,o):
    return "".join((o,vt,s))
myfunc("我","打了","小甲鱼")
SyntaxError: invalid syntax
def myfunc(s,vt,o):
    return "".join((o,vt,s))
myfunc("我","打了","小甲鱼")
SyntaxError: invalid syntax
为什么总是会出现这种情况呢???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-28 11:00:36 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-28 20:59:35 | 显示全部楼层
码农心 发表于 2022-5-16 16:07
def myfunc(s,vt,o):
    return "".join((o,vt,s))
myfunc("我","打了","小甲鱼")

同样也遇到类似情况,我的Py版本为3.10.3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-30 08:39:43 | 显示全部楼层
另起一行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-4 23:11:13 | 显示全部楼层
学习打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-19 15:16:58 | 显示全部楼层
码农心 发表于 2022-5-16 16:07
def myfunc(s,vt,o):
    return "".join((o,vt,s))
myfunc("我","打了","小甲鱼")

''.join() 功能默认不返回结果
加一句
print(myfunc())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-19 15:52:44 | 显示全部楼层
为什么我的sum是这样:  sum(iterable, start=0, /),不能使用关键字参数了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-2 16:18:33 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-11 14:44:57 | 显示全部楼层
>>> sum([1,2],start=2)
Traceback (most recent call last):
  File "<pyshell#169>", line 1, in <module>
    sum([1,2],start=2)
TypeError: sum() takes no keyword arguments
>>> sum([1,2],2)
5

我使用这个,右侧start=2,报错,不知道是什么原因?


滴滴滴~打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-6 20:58:43 | 显示全部楼层
墨墨在努力吖 发表于 2022-10-11 14:44
>>> sum([1,2],start=2)
Traceback (most recent call last):
  File "", line 1, in

用help(sum)查看你的sum函数情况,sum(iterable, /, start=0),看/在哪个位置.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-30 11:09:51 | 显示全部楼层
def myfunc(s,vt,o):
    return"".join(o,vt,s)

myfunc("我","打了","小甲鱼")
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    myfunc("我","打了","小甲鱼")
  File "<pyshell#10>", line 2, in myfunc
    return"".join(o,vt,s)
TypeError: str.join() takes exactly one argument (3 given)
def myfunc(s,vt,o):
    return"".join((o,vt,s))

myfunc("我","打了","小甲鱼")
'小甲鱼打了我'
myfunc("香蕉","打了","大海")
'大海打了香蕉'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-11 16:49:01 | 显示全部楼层
码农心 发表于 2022-5-16 16:07
def myfunc(s,vt,o):
    return "".join((o,vt,s))
myfunc("我","打了","小甲鱼")

交互模式里应该在隔一行,不然myfunc的缩进与上面def是对齐的,自然就报错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-11 16:50:35 | 显示全部楼层
andyleesh 发表于 2022-12-30 11:09
def myfunc(s,vt,o):
    return"".join(o,vt,s)

return后加空格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-12 20:58:19 | 显示全部楼层

感谢指导,我学到现在感觉跟没学一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-2 15:11:27 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-2 15:13:12 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 20:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表