函数的定义
python
使用def
来定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| def print_str(x): print (x) ``` 调用`print_str("12")` 打印`12`
----------------------------
`python`支持默认参数。
```python def print_str(x,y="end"): print (x,y) ```
调用`print_str("12")`,不传递y参数 打印`12 end` 调用`print_str("12","continue")` 打印`12 continue`
如果是多个默认参数,可以根据参数的名称来指定参数。
``` python def print_str(x,y="y",z="z"): print ("x:",x) print ("y:",y) print ("z:",z)
|
当调用print_str(1,2)
,打印结果:
1 2 3 4 5 6 7 8 9 10
| x: 1 y: 2 z: z ```
当调用`print_str(1,z=2)`,打印结果: ``` cte x: 1 y: y z: 2
|
使用默认参数需要注意一个问题:默认定义的时候,默认参数值已近计算出来
,如果是一个默认参数是一个引用,则会发生改变。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| def add_dict(arr=[]): arr.append("end") print (arr) add_dict() add_dict() add_dict() ```
打印结果如下:
```cte ['none'] ['none', 'none'] ['none', 'none', 'none']
|
所以,如果使用可变的引用变量,则注意这种形式。可以使用None
来代替:
1 2 3 4 5 6
| def add_dict(arr=None): if arr is None: arr=[]
arr.append("end") print (arr)
|
可变参数
在python
支持可变的个数的参数,在原来的参数上面增加一个*
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| def print_str(*x): print (x) print_str(1,2,3,4) ``` 打印结果如下:`(1, 2, 3, 4)`
> 可变参数在函数调用时自动组装为一个tuple
如果想把一个数组的元素当成默认参数传到方法里面,该如何操作?
``` python def print_str(*x): print (x)
arr=[1,2,3,4] print_str(arr)
|
打印结果:([1, 2, 3, 4],)
,这个是把arr当成一个list
类型的参数传入到方法中,打印出来是一个tuple([],)
类型。
所以在python允许list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| def print_str(*x): print (x)
arr=[1,2,3,4] print_str(*arr) ``` 打印结果:`(1, 2, 3, 4)`
-----------------------------
关键字参数是把默认参数当成一个`dict`的类型,使用方法是`**`,我们定义一个关键字参数:
``` python def print_str(x,**arg): print (x,arg) print_str(1)
|
打印结果是:1 {}
调用print_str(1,a=1,b=2,c=3)
,打印结果:1 {'a': 1, 'b': 2, 'c': 3}
同样如果想把一个dict
类型的参数传递进来,也需要使用**
1 2 3 4
| def print_str(x,**arg): print (x,arg) dic={'a': 1, 'b': 2, 'c': 3} print_str(1,**dic)
|
打印结果:1 {'a': 1, 'b': 2, 'c': 3}
注意: dic这个中参数传递是一种拷贝,在函数内部修改不会影响原来的值。
1 2 3 4 5 6 7 8 9 10 11 12 13
| def print_str(x,**arg): arg["a"]=10 print (x,arg) dic={'a': 1, 'b': 2, 'c': 3} print_str(1,**dic) print(dic) ```
打印结果:
``` cte 1 {'a': 10, 'b': 2, 'c': 3} {'a': 1, 'b': 2, 'c': 3}
|