Python 入门教程
0.为什么选择 Python 入门?
1.安装
2.print
3.IDE
4.输入
5.变量
6.bool
7.if
8.while
9.random
10.变量2
11.逻辑判断
12.for循环
13.字符串
14.字符串格式化
15.循环的嵌套
16.字符串格式化2
17.类型转换
18.bool类型转换
19.函数
20.命令行常用命令
21.函数的参数
22.函数应用示例
23.if, elif, else
24.if的嵌套
25.初探list
26.操作list
27.list切片
28.字符串的分割
29.连接list
30.字符串的索引和切片
31.读文件
32.写文件
33.处理文件中的数据
34.break
35.continue
36.异常处理
37.字典
38.模块
39.用文件保存游戏(1)
40.用文件保存游戏(2)
41.用文件保存游戏(3)
42.函数的默认参数
43.查天气(1)
44.查天气(2)
45.查天气(3)
46.面向对象(1)
47.面向对象(2)
48.面向对象(3)
49.面向对象(4)
50.and-or技巧
51.元组
52.数学运算
53.真值表
54.正则表达式(1)
55.正则表达式(2)
56.正则表达式(3)
57.正则表达式(4)
58.正则表达式(5)
59.随机数
60.计时
61.调试程序
62.python 2 到 3 的新手坑
63.python shell
64.列表解析
65.函数的参数传递(1)
66.函数的参数传递(2)
67.函数的参数传递(3)
68.lambda 表达式
69.变量的作用域
70.map 函数
71.reduce 函数
72.多线程
【Python 第67课】函数的参数传递(3)
今天来说说最为灵活的一种参数传递方式:
func(**kargs)
上次说的 func(*args) 方式是把参数作为 tuple 传入函数内部。而 func(**kargs) 则是把参数以键值对字典的形式传入。
示例:
def printAll(**kargs):
for k in kargs:
print (k, ':', kargs[k])
printAll(a=1, b=2, c=3)
printAll(x=4, y=5)
输出:
a : 1
c : 3
b : 2
y : 5
x : 4
字典是无序的,所以在输出的时候,并不一定按照提供参数的顺序。同样在调用时,参数的顺序无所谓,只要对应合适的形参名就可以了。于是,采用这种参数传递的方法,可以不受参数数量、位置的限制。
当然,这还不够。Python 的函数调用方式非常灵活,前面所说的几种参数调用方式,可以混合在一起使用。看下面这个例子:
def func(x, y=5, *a, **b):
print (x, y, a, b)
func(1)
func(1,2)
func(1,2,3)
func(1,2,3,4)
func(x=1)
func(x=1,y=1)
func(x=1,y=1,a=1)
func(x=1,y=1,a=1,b=1)
func(1,y=1)
func(1,2,3,4,a=1)
func(1,2,3,4,k=1,t=2,o=3)
输出:
1 5 () {}
1 2 () {}
1 2 (3,) {}
1 2 (3, 4) {}
1 5 () {}
1 1 () {}
1 1 () {'a': 1}
1 1 () {'a': 1, 'b': 1}
1 1 () {}
1 2 (3, 4) {'a': 1}
1 2 (3, 4) {'k': 1, 't': 2, 'o': 3}
在混合使用时,首先要注意函数的写法,必须遵守:
- 带有默认值的形参(arg=)须在无默认值的形参(arg)之后;
- 元组参数(*args)须在带有默认值的形参(arg=)之后;
- 字典参数(**kargs)须在元组参数(*args)之后。
可以省略某种类型的参数,但仍需保证此顺序规则。
调用时也需要遵守:
- 指定参数名称的参数要在无指定参数名称的参数之后;
- 不可以重复传递,即按顺序提供某参数之后,又指定名称传递。
而在函数被调用时,参数的传递过程为:
- 按顺序把无指定参数的实参赋值给形参;
- 把指定参数名称(arg=v)的实参赋值给对应的形参;
- 将多余的无指定参数的实参打包成一个 tuple 传递给元组参数(*args);
- 将多余的指定参数名的实参打包成一个 dict 传递给字典参数(**kargs)。
是不是乍一看有点绕?没关系,赶紧打开你的编辑器,自行体会一下不同调用方式的用法。然后在未来的编程实践中慢慢熟悉吧。
来源:Crossin的编程教室