函数定义,方法:
#定义函数,提高代码的复用性
def hello(): #定义函数,提高代码的复用性
print('nihao')
hello()
输出结果:
nihao
函数入参,返回结果:
#函数里面遇到return,函数立即结束
def check_password(password):#校验密码是否合格,必传参数,位置参数
password_set = set(password)
if password_set & set(string.digits) and password_set & set(string.ascii_lowercase) \
and password_set & set(string.ascii_uppercase):
print('合法')
return True
else:
print('不合法')
return False
check_password('123')
输出结果:
不合法
写文件,不需要返回值,故没有return
def write_file(file_name,content):
with open(file_name,'w',encoding='utf-8') as fw:
fw.write(content)
write_file('a.txt','123456') #按位置传参
write_file(content='456789',file_name='a.txt') #按关键字传参
write_file('a.txt',content='12345') #这样也可以
读文件需要返回值,有return
def read_file(file_name):
with open(file_name,encoding='utf-8') as fr:
result = fr.read()
return result
result = read_file('a.txt')
默认值参数
def write_file(file_name,content):
with open(file_name,'w',encoding='utf-8') as fw:
fw.write(content)
def read_file(file_name):
with open(file_name,encoding='utf-8') as fr:
result = fr.read()
return result #读文件需要有返回结果
def op_file(file_name,content=None): #默认值参数,content为默认值参数,默认值为None
if content:#如果有content,认为是写文件
write_file(file_name,content)
else: #如果没有content,认为是读文件
result = read_file(file_name)
return result
练习
#判断小数
#'1.5'
def is_float(s):
s = str(s)
if s.count('.') == 1: #1.3
left,right = s.split('.')
if left.isdigit() and right.isdigit():#正小数
return True
if left.startswith('-') and left.lstrip('-').isdigit() and right.isdigit():
return True
函数返回结果
#如果一个函数没有写返回值的话,返回的就是None
#如果函数有多个返回值,那么返回的是一个元组
有多个返回值参数,返回结果是一个元组
def test2():
return 1,2,3
a,b,c = test2()
print(a,b,c)
输出结果:
1 2 3
全局变量,局部变量
#全局变量:一般定义在代码的最上面,大家都可以用的
#局部变量:在函数里面定义的变量,都是局部变量,作用域是某个函数体里
#先找局部变量是否定义,如有有局部变量,函数有限调用局部变量,局部变量没有,调用全局变量
全局变量
country = 'China' #country是全局变量
def say():
print(country)
def zhucheng():
print(country)
say()
zhucheng()
输出结果:
China
China
局部变量
country = 'China'#全局变量
def say():
word = 'Nihao'#局部变量
print(country)
def zhucheng():
country = 'Japan'#局部变量
print(country)
say()
zhucheng()
输出结果:
China
Japan
更改全局变量
#list、dict、set不需要用global来声明了,直接用内建函数方法就可以更改
#str、int、float、tuple、bool需要声明
file_name = 'a.txt'
#更改全局变量
# #list、dict、set不需要用global来声明了
# #str、int、float、tuple、bool#需要的
def update_file_name():
global file_name #定义全局变量,声明我们要改的是全局变量
file_name = 'a.json'#把全局变量file_name从a.txt改为a.json
print(file_name)
update_file_name()
print(file_name)
输出结果:
a.txt
a.json
练习
money = 500
def test(consume):
return money - consume
def test1(money):
return test(money) + money
money = test1(money)
print(money)
输出结果:
500
def test():
global a
a = 5
def test1():
c = a + 5
return c
res = test1()
print(res)
输出结果:
代码报错# 因为没有调用test()函数,找不到a这个全局变量
def test():
global a
a = 5
def test1():
c = a + 5
return c
test()
res = test1()
print(res)
输出结果:
10
函数参数
#必传参数(位置参数)、默认值参数
#可选参数(参数组)、关键字参数
可选参数:
它不是必传的,不限制参数个数,它是把参数放到了一个list里面
def send(*args):#可传一个参数,传多个,或者不传
for p in args:
print('发短信给xxx%s'%p)
send()
send(110)
send(110,120,119)
输出结果:
发短信给xxx110
发短信给xxx110
发短信给xxx120
发短信给xxx119
关键字参数:
它不是必传的,不限制参数个数,它是把参数放到了一个字典里面,
但是它传参的时候必须得用关键字的方式
def send_sms(**kwargs):
print(kwargs)
send_sms()
send_sms(xzh='晚上好')
send_sms(lhh='新年好',fd='生日快乐',lyh='新婚幸福')
输出结果:
{}
{'xzh': '晚上好'}
{'lhh': '新年好', 'fd': '生日快乐', 'lyh': '新婚幸福'}
参数组
四种参数传参顺序:
# 1、必填参数
# 2、默认值参数
# 3、参数组
# 4、关键字参数
def nb_func(name,age,country='China',sex='女',*args,**kwargs):
# 1、必填参数
# 2、默认值参数
# 3、参数组
# 4、关键字参数
print(name)
print(age)
print(sex)
print(country)
print(args)
print(kwargs)
nb_func('xh',18,'abc','efg','hhh',name=1,b=2,c=3)
nb_func('xh',18,'japan','nan','abc','efg','hhh','2335','23532')
匿名函数
定义方法:lambda 入参:返回值
a = lambda x,y:x+y #入参是x,y,返回值是x+y,a是函数名
result = a(1,2)
print(result)
filter(lambda x:str(x),[1,2,3,4,5]) #把[1,2,3,4,5]这个list作为入参,转换为字符串,并返回转换后的结果