python之函数参数(三)
1.python函数的四类参数
python函数的参数可以分为位置参数,默认参数,关键字参数,可变参数,函数可以没有参数,也可以有多个参数,参数是传递给函数的命名变量。
2.形参和实参
#coding=utf-8; def print_diamond(count): for i in range(count): #range 生成一个整数序列 range(3):0,1,2 if i <= count//2: # //整数除法 print(" "*(count//2-i) + "*"*(2*i + 1)) else: print(" "*(i - count//2) + "*"*((count-i)*2-1)) print_diamond(7)
所谓形参,就是函数定义中的参数,形参在函数体内可以使用,而实参,则出现在调用过程中。
上面的代码中,函数定义中的count就是形参,而最后一行的代码中,7就是实参,形参代表一种形式,实参,是实际的具体的起作用的数据。
3.必传参数(位置参数)
def sum(a,b): sums = a+b; return sums; print sum(1);
缺少参数会报错:
Traceback (most recent call last): File "C:/Users/m/PycharmProjects/liangbosheng/hanshus/mustcanshu.py", line 4, in <module> print sum(1); TypeError: sum() takes exactly 2 arguments (1 given)
4.默认参数
my_print函数根据count参数输出指定次数的content,我希望在两次输出的空档可以暂停一段时间,因此增加一个sleep参数。
import time def my_print(content, count, sleep=1): for i in range(count): print(content) time.sleep(1) my_print('ok', 3);
在调用函数时,我并没有传sleep这个形参,程序并没有报错,这是因为在定义函数的时候,给了sleep形参默认值1,这意味着,如果调用函数时没有传这个参数,python会用默认值来执行函数。默认值参数非常用有用,假设你在系统里的很多地方都使用最开始定义的my_print函数。
def my_print(content, count): pass
开始某一天,你需要增加一个参数sleep, 如果你将sleep定义为必传参数,那么所有用到函数my_print的地方都必须修改调用时的代码来增加这个入参,但如果你把sleep定义为默认参数,sleep已经默认等于1,除非必须传入其他的数值,否则就不需要这么做,之前的代码仍然可以使用。
定义函数是时,如果有多个默认参数,他们必须放置在参数列表的最后,不允许在中间放置一个必传参数。
5.关键字参数
关键字参数不是一个出现在函数定义时的概念,而是一个出现在函数调用时的概念。
import time def my_print(content, count, sleep=1): for i in range(count): print(content) time.sleep(1) my_print(count=2, content='关键字参数', sleep=2)
在调用函数时,我使用了key=value的形式来传递参数,不仅如此,还打乱了顺序,先传入了count,后传入了content,关键字参数允许你以任何顺序传递参数,只要必传参数都以key=value的形式传值即可。现在,你应该明白我前面所讲的,关键字参数是出现在函数调用时的概念。
使用关键字参数,可以让参数传递更加明确,让调用方清楚的知道每个参数的传值情况。
6.可变参数
可变参数分为两种: 1.*args 接受任意多个实际参数 2.**kwargs接收任意多个以关键字参数赋值的实际参数
6.1 *args 实例
#coding=utf-8; def kebian(*args): print args,type(args); for i in args: print i; return 0; kebian(2); kebian(2,3); kebian(4,5,6); kebian(7,8,9,10);
执行结果:
(2,) <type 'tuple'> 2 (2, 3) <type 'tuple'> 2 3 (4, 5, 6) <type 'tuple'> 4 5 6 (7, 8, 9, 10) <type 'tuple'> 7 8 9 10
你可以看到,我在定义kebian时,使用*args, args只是个名字,你可以随意修改,关键是前面有一个星。有了这个星,函数调用时传递多少个参数就变成了一个很随意的事情,所有传入的参数将被放入到一个元组中,因此args的类型是tuple元组。
6.2 **args 实例
def dictcanshu(**args): print args,type(args); for i,j in args.items(): print i,j; return 0; dictcanshu(a=2,b=4,c=6); dictcanshu(age=16,name="ben",country="japen");
在调用函数时,以关键字参数的形式进行参数传递,最终这些key-value对将组装成字典,args的类型是dict。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)