【博学谷学习记录】超强总结,用心分享|python基础(6)

目录

递推公式

函数

变量的作用域

函数参数

位置参数:

关键字参数

缺省参数(默认值)

不定长参数

包裹位置传递

包裹关键字传递

python拆包

lambda表达式


递推公式

推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列(一个有规律的列表或控制一个有规律列表)的结构体。 共有三种推导:`列表推导式`、`集合推导式`、`字典推导式。

变量名 = [表达式 for 变量 in 列表 for 变量 in  列表]
变量名 = [表达式 for 变量 in 列表 if 条件]


list1 = [i for i in range(10)]
print(list1)        #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

list1 = [i for i in range(10) if i % 2 == 0]
print(list1)        #[0, 2, 4, 6, 8]

#集合推导式:仍然有去重功能
list1 = [1, 1, 2]
set1 = {i ** 2 for i in list1}
print(set1)  # {1, 4}

函数

def 函数名(参数):
    函数体
    ...
    return 返回值
#return可以退出当前函数,导致return下方的代码不执行。

#调用
函数名(参数)


def sum_num(a, b):
    return a + b

result = sum_num(10, 20)
print(result)        # 30

函数的说明文档

def 函数名(参数):
    """ 说明文档的位置 """
    代码
    ......
#查看说明文档
help(函数名)

函数嵌套

所谓函数嵌套调用指的是一个函数里面又调用了另外一个函数。

变量的作用域

1.局部变量

所谓局部变量是定义在函数体内部的变量,即只在函数体内部生效。

def testA():
    a = 100
    print(a)


testA()   # 100
print(a)  # 报错:name 'a' is not defined

2.全局变量

所谓全局变量,指的是在函数体内、外都能生效的变量。

# 定义全局变量a
a = 100


def testA():
    print(a)  # 访问全局变量a,并打印变量a存储的数据


def testB():
    print(a)  # 访问全局变量a,并打印变量a存储的数据


testA()  # 100
testB()  # 100

3.global关键字

num = 100
def A():
    num = 200

def B():
    global num
    num = 200

A()
print(num)  # 100
B()
print(num)  # 200

函数参数

位置参数:

调用函数时根据函数定义的参数位置来传递参数。

递和定义参数的顺序及个数必须一致。

def user_info(name, age, gender):
    print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')


user_info('TOM', 20, '男')

关键字参数

函数调用,通过“键=值”形式加以指定。

函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序。

def user_info(name, age, gender):
    print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')


user_info('Rose', age=20, gender='女')
user_info('小明', gender='男', age=16)

缺省参数(默认值)

缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)。

函数调用时,如果为缺省参数传值则修改默认参数值;否则使用这个默认值。

def user_info(name, age, gender='男'):
    print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')


user_info('TOM', 20)
user_info('Rose', 18, '女')

不定长参数

不定长参数也叫可变参数。用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。

包裹位置传递

传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是包裹位置传递。

def user_info(*args):
    print(args)


# ('TOM',)
user_info('TOM')
# ('TOM', 18)
user_info('TOM', 18)

包裹关键字传递

def user_info(**kwargs):
    print(kwargs)


# {'name': 'TOM', 'age': 18, 'id': 110}
user_info(name='TOM', age=18, id=110)
#求函数所有参数的和(参数数量不固定)
          def func(*args, **kwargs):
                 result = 0
                 for i in args:
                      result += i
                 for i in kwargs.values():
                      result += i
                 return result
           print(func(10, 20, 30, num1 = 40, num2 = 50))  #结果:150                    

python拆包

拆包: 对于函数中的多个返回数据, 去掉元组, 列表 或者字典直接获取里面数据的过程。

#元组拆包
def return_num():
    return 100, 200


num1, num2 = return_num()
print(num1)  # 100
print(num2)  # 200

#字典拆包
dict1 = {'name': 'TOM', 'age': 18}
a, b = dict1

# 对字典进行拆包,取出来的是字典的key
print(a)  # name
print(b)  # age

print(dict1[a])  # TOM
print(dict1[b])  # 18

lambda表达式

lambda 参数列表 : 表达式
# lambda表达式
fn2 = lambda: 100
#函数
def fn1():
    return 100

#带参数的lambda
def add(a, b):    
    return a + b


result = add(1, 2)
print(result)

fn1 = lambda a, b: a + b
print(fn1(1, 2))

lambda参数形式

#无参数
func1 = lambda : 100
print(func1())    #100

#一个参数
func2 = lambda a : a
print(func2('shuiage'))  #shuaige

#默认参数
func3 = lambda a, b, c=100: a + b + c
print(func3(10, 20))       #130

#可变参数:*args
func4 = lambda *args: args
print(func4(10, 20, 30))    #(10, 20, 30)

#可变参数:**kwargs
func5 = lambda **kwargs: kwargs
print(func5(name = 'Tom', age = 23, gender = 'male')) #{'name': 'Tom', 'age': 23, 'gender': 'male'}

带判断的lambda表达式

func5 = lambda a, b: a if a > b else b
print(func5(1000, 500))            # 1000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值