2.9 函数 (二)
函数定义:函数是组织好的,可重复使用的,能够完成特定功能的代码块,它是代码块的抽象。
In [108]: get_keys({'a':40},40)
Out[108]: ['a']
位置参数是不可以交换位置的
In [109]:
def get_keys(dict_varibal,value):
return[k for k,v in dict_varibal.items() if v == value]
1.get_keys 函数名,(函数名的命名,遵循变量命名的规范)
2.()中的内容为参数 dict_varibal:形参,调用的时候传递的值(a)才是实际的参数,实参和形参是一一对应的,称:位置参数
3.return 是返回值
位置参数一一对应,不太方便 使用关键字参数 关键字参数好处:可以不按顺序去写
#关键字参数
In [110]:
get_keys(dict_varibal={'a':40},value=40)
#把形参dict_varibal写了出来
Out[110]: ['a']
#不按顺序
In [111]: get_keys(value=40,dict_varibal={'a':40})
Out[111]: ['a']
2.10 函数 (三)
问题:函数通过参数获取我们传递的值,函数中改变了参数的值,那么我们传递进去的值是否改变?
In [112]:
def test(varibal): # 翻译 :定义测试(变量):
varibal = 100
return varibal
In [113]:
var = 1
test(var) # 翻译:测试
Out[113]: 100
In [114]:
print(var)
1
varibal在函数内部进行更改,但var变量并没有改变
In [115]:
def test(varibal):
varibal.append(100) #增加100
return varibal #可写可不行,
In [116]:
var = []
test(var)
Out[116]: [100]
In [117]: var
Out[117]: [100]
var 发生了改变
不建议对可变类型在函数内部进行更改,建议用函数进行从新赋值
In [118]:
def test(varibal):
temp = varibal.copy()
temp.append(100)
return temp
#对var进行重新赋值
In [119]:
var = []
var = test(var)
In [120]: var
Out[120]: [100]
#如果不重新赋值,var是空的
In [121]:
var =[]
test(var)
Out[121]: [100]
In [122]: var
Out[122]:[]
参数的收集
#参数的值知道有name和age,还有其他的不知道,所以用 *args和**kwargs表示( * 收集位置参数 , ** 收集关键字参数)
In [123]:
def test(name,age,*args,**kwargs):
print(name,age,*args,**kwargs)
In [124]:
test('wong',12)
wong 12
In [125]:
test('wong',12,23,'ikl'[23,34])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-125-6f143343b5c9> in <module>()
----> 1 test('wong',12,23,'ikl'[23,34])
TypeError: string indices must be integers
问:视频人家是对的 ,这里去掉 'ikl' 则正确
In [126]:
test('wong',12,23,[23,34])
wong 12 23 [23, 34]
#不加星号:
In [127]:
def test(name,age,*args,**kwargs):
print(name,age,args,**kwargs)
In [128]:
test('wong',12,23,[23,34])
#不加 * 把后面的一些输出一个元组
wong 12 (23, [23, 34])
#关键字参数
In [129]:
dict_varibals ={
'weight': 120,
'height':175
}
test('wong',12,dict_varibals)
wong 12 ({'weight': 120, 'height': 175},)