python函数传参
python函数传参
位置参数#
常见的函数参数:
def add_both(x, y):
return x+y
默认参数#
def enroll(name, gender, age=6, city='Beijing'):
print('name:', name)
print('gender:', gender)
print('age:', age)
print('city:', city)
enroll('tom','man',12,'shanghai')
# 输出
name: tom
gender: man
age: 12
city: shanghai
如果不按顺序时,需要把参数名加上:
def enroll(name, gender, age=6, city='Beijing'):
print('name:', name)
print('gender:', gender)
print('age:', age)
print('city:', city)
enroll(gender='woman',name='Pam',age=22,city='changsha')
# 输出
name: Pam
gender: woman
age: 22
city: changsha
使用默认参数的特点:
- 能降低调用函数的难度
- 必选参数在前,默认参数在后,否则会报错
- 当有多个参数时,把变化大的参数放前面,变化小的参数放后面,可以作为默认参数。
默认参数必须指向不变对象:
def add_end(L=[]):
L.append('END')
return L
add_end()
add_end()
# 输出
['END', 'END']
-
问题:连续调用函数,默认参数是[],但函数似乎每次都记住了上次添加了‘end’后的list
-
原因:默认参数L是一个变量,指向对象[],每次调用函数,如果改变了L的内容,则下次调用时,默认参数的内容改变了,不再是函数定义的[]
-
解决办法:默认参数都是None
def add_end(L=None):
if L is None:
L = []
L.append('END')
return L
add_end()
add_end()
# 输出
['END']
- 将参数设置为不变对象,对象内部的数据就不能修改。
可变参数#
可变参数就是传入的参数个数是可变的,可以是任意的。
传统方式,可以传入list、tuple。
def cal_num(nums):
for i in nums:
print(i)
cal_num([1,2])
cal_num(('aaa','sss'))
cal_num('ssss')
# 输出
1
2
aaa
sss
s
s
s
s
可定义可变参数,是在参数前加一个*号,将其接收到参数值自动组装为一个tuple:
def cal_num(*nums):
for i in nums:
print(i)
cal_num(1,2)
cal_num([1,2])
cal_num(('aaa','sss'))
cal_num('ssss')
# 输出
1
2
[1, 2]
('aaa', 'sss')
ssss
如果有一个list或tuple,想要将其元素逐个传入函数中:
def cal_num(*nums):
for i in nums:
print(i)
nums = [1, 2]
cal_num(nums)
cal_num(*nums)
# 输出
[1, 2]
1
2
关键字参数#
可定义关键词参数,是在参数前加一个**号,将传入的任意个参数值自动组装为一个dict,即类似于“键值对”:
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
person('Michael', 30)
person('Bob', 35, city='Beijing')
person('Adam', 45, gender='M', job='Engineer')
# 输出
name: Michael age: 30 other: {}
name: Bob age: 35 other: {'city': 'Beijing'}
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
命名关键字参数#
命名关键字参数是限制关键字参数的名字,与关键字参数定义不同,只需要一个特殊分隔符*,后面的参数作为命名关键字参数。
def person(name, age, *, city, job):
print(name, age, city, job)
person('Michael', 30)
person('Bob', 35, city='Beijing')
person('Adam', 45, city='shanghai', job='Engineer')
# 输出
报错
报错
Adam 45 shanghai Engineer
- 命名关键字参数,不能是0参数,必须传入指定参数名的参数
如果函数定义中已经有了一个可变参数,后面的命名关键字参数就不再需要特殊分隔符(加上会报错):
def person(name, age, *args,city, job):
print(name, age, args, city, job)
person('Adam', 45,'M',city='shanghai', job='Engineer')
# 输出
Adam 45 ('M',) shanghai Engineer
作者:Hang Shao
出处:https://www.cnblogs.com/pam-sh/p/18020520
版权:本作品采用「知识共享」许可协议进行许可。
声明:欢迎交流! 原文链接 ,如有问题,可邮件(mir_soh@163.com)咨询.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2023-02-19 人行-笔试准备
2020-02-19 项目三:视频播放器
2020-02-19 项目二:今日天气