函数

函数定义,方法:

在这里插入图片描述
#定义函数,提高代码的复用性

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作为入参,转换为字符串,并返回转换后的结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值