python学习笔记整理03(函数)

1 语法:

1.1 基本语法:

# 1.定义函数
# 使用 def (define)关键字定义函数,且函数命名方法要遵循 标识符规则
def func1():
    # 定义函数内的代码称为 函数体
    print('函数1')

# 2.调用函数
# 调用函数代码必须在函数体外,直接使用函数名即可调用
func1()

#3.函数可嵌套使用
def func2():
    fun1()
    print('函数2嵌套了函数1')

 

1.2 形参与实参:

# 形式参数,简称形参:定义函数时定义,起占位作用,没有实际数值
def func(num1, num2):  # num1 num2 是形参
    num = num1 + num2  # 在函数中会变化数值的参数,可以定义为形参
    print(num) 


# 实际参数,简称实参:调用函数时传递,有实际数值
func1(1, 3)  # 1 3 是实参,实参必须与形参数量一一对应

 

1.3 返回值:

# 用 return 关键字定义返回数据,若没有返回值可省略不写,或直接书写 return 不接数据
# 函数中得到的数据在后续的代码中还要使用,就需要将这个数据值返回,以供后续使用
def func(num1, num2):
    num = num1 + num2
    return num  # 函数代码遇到 return 就会结束执行

 

 

2 变量进阶

 2.1 变量的本质

  1)变量存储数据的方法是 引用地址,即将 数据地址 保存到 变量对应的内存中,可使用 id() 获取引用的数据地址

  2)可变类型和不可变类型:数据所在的内存是否允许修改,允许修改就是可变类型,不允许修改就是不可变类型

    ①只有赋值运算符 = 可以改变变量的引用(不使用=,变量引用的数据中的内容是否会变化,会变化是可变的,不会变化是不可变的)

    ②可变类型:列表、字典、集合,不可变类型:整型、浮点型、字符串、元组  

2.2 组包和拆包

a = 1
b = 2

# 组包 pack:将多个数据值使用逗号连接,组成元组
c = a, b  # print(c)  ===>   (1, 2)

#拆包 unpack:将容器中的数据值使用多个变量分别保存的过程
(a, b) = c  # print(a)   ===>  1,print(b)   ===>   2

# 注意变量的个数和容器中数据的个数要保持一致
# 赋值运算符是将 右边代码的执行结果 保存在 左侧变量中
x, y, z = [1, 2, 3]  # print(x, y, z)  ===>   1, 2, 3

 

2.3 局部变量和全局变量

# 全局变量:在函数外部定义的变量,可以在整个代码中使用
g_num = 1

def func1():
    # 局部变量:在函数内部定义的变量,只能在函数内部使用
    num = 10
    print(f'func1 函数中的局部变量{num}')


def func2():
    print(f'代码中的全局变量{g_num}')


def func3():
    # 函数内部默认是局部变量,若想在函数内部修改全局变量,必须先用 global 声明
    global g_num
    g_num = 10
    print(f'修改了全局变量{g_num}')

 

 

3 函数进阶

3.1 返回多个数据值

def func(a, b):
    num1 = a + b
    num2 = a - b
    # 函数中返回多个数据值,将多个数据值组成 容器 进行返回,一般是元组(组包)
    return num1,  num2

# 获取数据方式一:索引
result = func(1, 2)
print(result[0], result[1])

# 获取数据方式二:拆包
x, y = func(1, 2)
print(x, y)

 

3.2 函数的参数

1)传参方式

def func(a, b, c):
    print(f'a:{a}, b:{b}, c:{c}')

# 位置传参:按照形参顺序传递实参
func(1, 2, 3)

# 关键字传参:指定具体形参传递数据值
func(a=1, b=2, c=3)

# 混用:关键字传参必须在位置传参之后
func(1, 2, c=3)

 

2)完整的参数

def func(name, *args, sep=' ', **kwargs):
    pass
# name  普通参数
# *args  (arguments)不定长位置(元组)参数,可接收任意多个位置参数,必须写在 位置参数 的后面
# sep=' '  默认参数(缺省参数),不传参时默认传递设置的默认值
# **kwargs  (key arguments)不定长关键字(字典)参数,可接收任意多个关键字参数,必须写在 所有参数 的后面
# 不定长参数作为单个参数传参时需要先拆包

def func(*args, **kwargs):
    num = 0
    for i in args:  # 
        num += i    
    for j in kwargs.values():
        num += j    
    print(num)


my_list = [1, 2, 3, 4]
my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# 想要将列表中的数据 分别作为位置参数 进行传参,需要用 * 对列表进行拆包操作
func(*my_list)
# 想要将字典中的数据 分别作为关键字参数 进行传参,需要用 ** 对字典进行拆包操作
func(**my_dict)

 

 3)匿名函数

# 标准函数:使用 def 定义的函数
# 匿名函数:使用 lambda 定义的函数

# 定义函数:lambda 参数: 一行代码,不需传参时,参数可省略,返回值是代码运行结果,不需要用 return
# 使用函数:赋值给变量 变量 = lambda 参数: 一行代码 ,使用 变量() 调用函数
func1 = lambda: print('匿名函数')  # func1()   ===>   匿名函数
func2 = lambda: '匿名函数'  # print(func2())   ===>   匿名函数
func3 = lambda a, b:print(a+b)  # func3(1, 2)   ===>   3
func4 = lambda a, b: a + b  # print(func4(1, 2))   ===>   3
# 使用匿名函数作为参数为字典排序
# 列表.sort(key=lambda x: x[key])

user_list = [{'name': 'zhangsan', 'age': 18}, {'name': 'lisa', 'age': 28}, {'name': 'zhaosi', 'age': 20}]

user_list.sort(key=lambda user_list: user_list['age'])
print(user_list)
posted @ 2022-12-14 21:01  十一10086  阅读(72)  评论(0编辑  收藏  举报