python函数
函数声明时使用 def关键字,返回时使用 return关键字。
如果Python达到函数的尾部时仍然没有遇到return语句,就会自动返回None。
def my_function(x,y,z=10):
if z>1:
return z*(x+y)
elif z<1:
return z*(x-y)
其中x和y是位置参数,z是关键字参数,关键字参数可以设置默认值,函数调用可以重新传入或不传:
my_function(1,2,-1) # 1
my_function(2,3) # 50
注意:关键字参数必须跟在位置参数(如果有的话)后
def my_function(x,y=10,z):
if z>1:
return z*(x+y)
# 报错
也可以使用关键字参数向位置参数传参,制定参数名,颠倒参数位置顺序,在部分场景中,这样做有助于代码可读性。
my_function(y=5,x=1,z=-1) # 4
使用 global关键字 可以在函数内部给全局变量赋值
a = None
def func():
global a
a = []
for i in range(10):
a.append(i)
func()
ptint(a) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
返回多个值时,python格外美妙
实际上,返回的东西本质上依旧是一个对象,是一个元组,只不过根据元组的拆包原理,有了这样的写法:
def func2():
a=1
b=2
c=3
return a,b,c
res_a,res_b,res_c = func2()
print(res_a,res_b,res_c) # 1 2 3
在做一些字符串格式的调整时,如需要去除空格,移除标点符号,调整适当的大小写,
可以使用内建的字符串方法,结合标准库中的正则表达式模块re:
import re
states = [' Alabama ', 'Georgia! ', 'Georgia', 'georgia', 'FlOrIda', 'south carolina##', 'West virginia? ']
def clean_str(strings):
res = []
for string in strings:
string = string.strip() # 去除字符串两边的空格
string = string.title() # 字符串首字母、空格后首字母大写
string = re.sub('[?#!]','',string) # 利用正则表达式替换
res.append(string)
return res
clean_str(states)
#['Alabama', 'Georgia', 'Georgia', 'Georgia', 'Florida', 'South Carolina', 'West Virginia']
还可以将逐步操作的函数写在一个列表里,做如下操作:
def fun_a(value):
return re.sub('[!#?]','',value)
clean_funcs = [str.strip,fun_a,str.title]
def clean_strings(strings,funcs):
res = []
for string in strings:
for func in funcs:
string = func(string)
res.append(string)
return res
clean_strings(states,clean_funcs)
#['Alabama', 'Georgia', 'Georgia', 'Georgia', 'Florida', 'South Carolina', 'West Virginia']
利用循环存放函数的列表,获得和上面相同的效果。
可以理解为:如果要对同一个对象做多次函数操作,先将函数格式转变为 函数名(处理对象) 就可以使用列表进行上述操作。