自建函数
1.命名空间、作用域和本地函数
Python 变量有全局和局部两种作用范围。命名空间就是用来描述变量的作用域。
一般来说在函数内部定义的变量和参数都是局部变量,除非进行特殊的说明,在函数外部定义的变量一般是全局变量。
def func():
a=[]
for i in range(5):
a.append(i)
return a
a
#NameError: name 'a' is not defined
#函数内部的变量再函数执行结束后,会被销毁,所以命名空间中不存在 a 变量。
def func1():
global b
b={'1':1,'2':2}
func1
b
#在运行完函数且退出之后,命名空间仍然有 b 存在。
2.返回多个值
当需要返回多个值时,实际上是以元组形式返回。而元组形式可以以拆包的方式赋值给不同的变量。
def f():
a=5
b=6
c=7
return a,b,c
a,b,c=f()
print(a,b,c)
3.函数作为对象
因为 Python 的函数是一个对象,可以作为元素添加到列表或者元组中,对变量进行批量处理。
#清洗以下的数据
#states=[' Alabama ','Georgia!','Georgia','georgia','FlorIda','south carlina##','West virginia?']
#清洗数据需要去除两端的空格,去除标点符号,开头为大写,其余全部小写,将相同的名称合并
states=[' Alabama ','Georgia!','Georgia','georgia','FlorIda','south carlina##','West virginia?']
import re
def clean_strings(strings):
result=[]
for i in strings:
i=i.strip()
i=re.sub('[!#?]','',i)
i=i.title()
result.append(i)
result=set(result)
return result
clean_strings(states)
#strip函数去除两端的空格;re是正则表达式模块,将标点符号替换成'',不占空格。title将开头字母大写
#除了上述的方法之外,还可以将函数作为对象
def remove_punctuations(i):
return re.sub('[!#?]','',i)
func=[str.strip,remove_punctuations,str.title]
def clean_strings(strings,func):
result=[]
for i in strings:
for function in func:
i=function(i)
result.append(i)
result=set(result)
return result
clean_strings(states,func)
#结果为:{'Alabama', 'Florida', 'Georgia', 'South Carlina', 'West Virginia'}
4.匿名Lambda函数
匿名函数通常包含了单个语句,使用 Lambda 关键词定义。
#lambda x : x*2
#表示对于x对象,返回 x*2 的值
#也可以表示为
def func_1(x):
return x*2
#只是匿名函数缺少函数名
def do_something_to_list(listname,func):
return [func(x) for x in listname]
list_A=[1,2,3]
do_something_to_list(list_A,lambda x : x**2)
网友评论