python 基础之 函数篇

在这里插入图片描述

函数

  • 将实现特定功能的代码封装,起个名字,通过该名字可以调用该函数的功能

  • 语法:

    # 声明函数
    def 函数名([参数1,......]):
        语句1
        ......
        [return 值1,......]
    
    # 调用函数
    函数名([参数1,......])
    

例1:声明一个函数,接收一个整数n,计算出1-n的和

# 声明函数
def get_sum(n):
    s = 0
    for i in range(1, n+1):
        s += i
    print(s)

# 调用函数
get_sum(100)
get_sum(1000)
get_sum(10000)

例2:声明一个函数,实现md5加密

import hashlib

def get_md5(s):
    md = hashlib.md5(s.encode('utf8'))  # md5加密,返回一个md5对象
    return md.hexdigest()   # 返回密文

f = get_md5('123456')   # 将函数返回值赋值给变量f
print(f)

例3:

import hashlib
accounts = {'1001':['张三','e10adc3949ba59abbe56e057f20f883e',1000]}

def get_md5(s:str):
    md = hashlib.md5(s.encode('utf8'))  # md5加密,返回一个md5对象
    return md.hexdigest()   # 返回密文
def login():
    # 输入账号
    account = input('账号:')
    # 检查账号是否存在
    if account in accounts:
        passwd = input('密码:')
        # 检查密码是否正确
        if get_md5(passwd) == accounts[account][1]:
            name = accounts[account][0]  # 姓名
            balance = accounts[account][-1]  # 余额
            print(f'尊敬的 {name.replace(name[1], "*", 1)} 先生/女士,您的账户余额为 {balance:.2f} 元')
        else:
            print('密码错误,请重新输入')
    else:
        print('账号不存在,请重新输入')

login()

参数

  • 形参:声明函数时定义的参数
  • 位置参数(必须参数):定义参数时只需要顶一个参数名即可,调用函数时必须给位置参数传值
  • 默认参数:通过key=value方式定义默认参数,如果存在位置参数必须放在位置参数的后面,调用函数时可以不给默认参数传值(此时函数内部使用参数默认值)
def func(a,b,c=10):
    print(f'a={a}\tb={b}\tc={c}')

func(1,2)   # 不给c传值,使用默认值10
func(1,2,3)  # 给c传值3,使用实际传入的值
def f1(a,b=10,*args,**kwargs):
    print(a,b)
    print(args)
    print(kwargs)

f1(10)    # 10->a,args为空元组,kwargs为空字典
f1(10,20)   # 10->a,20->b,args为空元组,kwargs为空字典
f1(10,20,30,40,50) # 10->a,20->b,args=(30,40,50),kwargs为空字典
f1(10,20,30,40,50,aa=100,bb=200) # 10->a,20->b,args=(30,40,50),kwargs={'aa':100,'bb':200}
f1(10,aa=100,bb=200) # 10->a,args为空元组,kwargs={'aa':100,'bb':200}

变量作用域

  • 全局变量:在函数外部声明的变量,可以在函数内部以及函数外部使用
  • 可变数据类型:在函数内部可以直接调用相关的方法修改变量值
  • 不可变数据类型:在函数内部只能引用变量的值,不能直接修改变量
  • 局部变量:在函数内部声明的变量,只能在函数内部使用
  • global:在函数内部修改全局变量(不可变数据类型),需要先通过global声明
a,b = 10,20  # 全局变量
li = [1,2,3]
def func():
    global a   # 声明,表示函数内操作的变量a是全局变量
    a = 100   # 修改全局变量
    li.append(100)  # 修改全局变量
    s = a+b   # 局部变量
    print(s)

func()
print(a,b)

匿名函数

  • 语法:lambda [参数1,......]:返回值,参数可选的,返回值必须有,并且只能有1个
    例:列表,指定排序内容
li = [['张三',99],['李四',89],['杨雨',93]]
li.sort(key=lambda x:x[1])
print(li)

递归函数

  • 在函数内部通过return语句返回函数本身的调用
  • 注意:递归需要向已知条件方向进行;递归的层数不超过1000层

已知f(x)=f(x-1)+3,f(0)=5,求f(3)的值
f(3)=f(2)+3=f(1)+3+3=f(0)+3+3+3=14

def f(x):
    if x == 0:
        return 5
    return f(x-1)+3

print(f(3))

例1:声明一个函数,接收若干个值(可以是字符串,数字),将这些内容拼接成一个字符串并返回将其加密后的密文(md5)

import hashlib
def get_md5(*args):
    if not args:
        print('未传入参数')
        return False
    tmp = [str(i) for i in args]  # 将元组中的每个元素转换为字符串
    s = ''.join(tmp)   # 将列表中的每个元素拼接成一个字符串
    return hashlib.md5(s.encode('utf8')).hexdigest()  # 返回密文

r = get_md5('asd',123,123,'asdasd')
print(r)   

r = get_md5()
print(r)  # False

可变参数

  • *args,接收若干以value传入的参数,将其封包到元组args中
  • **kwargs,接收若干key=value传入的参数,将其封包到字典kwargs中

实参:调用函数时传入值

  • 以value传入,主要是为位置参数、默认参数、*args可变参数传值
  • 以key=value传入,主要是为位置参数、默认参数、**kwargs可变参数传值

函数名:必须符合标识符的命名规范

参数:可选的,可以有多个

return:用于返回函数处理结果,可选的,可以返回多个值。如果没有return语句,则默认返回None

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佛系的老肖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值