python基础二 函数 递归 装饰器 迭代器 生成器 内置函数 二分法应用

函数拆包tup=("j1","a1","c1","k1")a,b,c,d=tupprint(a,b,c,d) #结果 j1 a1 c1 k1# 装包tup=("j1","a1","c1","k1")a,*b,c=tupprint(a,b,c) #结果 j1 ['a1', 'c1'] k1# *把中间两个元素装在了一起 并且存为列表赋值给b# 拆包tup=("j1","a1","c1","k1")print(*tup)#结果 j1 a1 c1 k1# *把元组元素拆开了 拆成了单
摘要由CSDN通过智能技术生成

函数 迭代器 生成器

拆包和装包

tup=("j1","a1","c1","k1")
a,b,c,d=tup
print(a,b,c,d) #结果 j1 a1 c1 k1

# 装包
tup=("j1","a1","c1","k1")
a,*b,c=tup
print(a,b,c) #结果 j1 ['a1', 'c1'] k1
# *把中间两个元素装在了一起 并且存为列表赋值给b

# 拆包
tup=("j1","a1","c1","k1")
print(*tup)#结果 j1 a1 c1 k1
# *把元组元素拆开了 拆成了单个的元素

tup=["j1","a1","c1","k1"]
print(*tup)#结果 j1 a1 c1 k1
# *把列表元素拆开了 拆成了单个的元素

# 从上面代码可以看出 * 对于列表和元组可以拆开,对于单个的元素可以装在一起


函数

没有参数的函数
# 简单函数
def func():
    print("我是func")
func() #结果 我是func

# 带有return
def func():
    print("我是func")
    return
    print("你好")
func() # 结果 我是func # 后面的你好不打印 应为函数中遇到return 函数就终止运行了

静态参数和默认值参数
#位置传参 即传入的实参(1,2,3,4)的位置和形参(a,b,c,d)的位置一样
def func(a,b,c,d):
    return a+b+c+d
value=func(1,2,3,4)
print(value) #10 

#关键字传参 就是用 “形参=某个值(实参)” 的方法来传参
def func(a,b,c,d):
    return a+b+c+d
value=func(a=1,b=2,c=3,d=4)
print(value) # 10

#混合传参 就是位置传参和关键字传参一起用 这个时候要注意 位置参数必须在前面 关键字传参必须在后面
def func(a,b,c,d):
    return a+b+c+d
value=func(a=1,b=2,3,4)  # 这个传参 关键字在前位置在后 虽然我们还是能看懂什么意思 但是机器不能识别 
print(value) # 报错

def func(a,b,c,d):
    return a+b+c+d
value=func(1,2,b=3,d=4)#  这样传参 虽然位置在前但是后面关键字传参的时候 出现错误
print(value) #报错

def func(a,b,c,d):
    return a+b+c+d
value=func(1,2,c=3,d=4) # 这就符合混合传参的法则 并且关键字也没有错误 
print(value)# 10


# 默认值传参 默认值参数一般在定义函数的时候放在位置参数后面
def func(a,b,c,d=10):
    return a+b+c+d
value=func(1,2,3)
print(value) # 16

def func(a,b,c=10,d): # 定义函数的时候 默认值参数放在了其他参数前面 
    return a+b+c+d
value=func(1,2,3,5) # 虽然这里传入了四个参数 但是机器还是不能识别 结果报错
print(value) 
动态传参 *args **kwargs
def func(*args):
    print(args)
func("a","b","c")# 结果('a', 'b', 'c')
# * 把传入的所有参数都装包成了一个元组 然后赋值给 args 所有args 打印出来是('a', 'b', 'c')

def func(**food):
    print(food)
func(good_food="haha",junc_food="hehe")
# 结果{'good_food': 'haha', 'junc_food': 'hehe'}  # 把每个参数=号前面的变成了键 =后面的变成了值 组合成了字典

def func(**args):
    print(args)
dic={
   "a":1,"b":2}
func(dic)# 报错 
func(**dic)#结果 {"a":1,"b":2} # 把dic拆包之后传入
参数摆放位置 位置参数>*args>默认值参数>**kwargs
def func(a,b,*c,e=10,**d,):
    print(a+b+e,end=" ")
    print(c,end=" ")
    print(d,end=" ")
    print("-----------")

func(1,2,3,4,5,aa="你好",bb="我很好")# 结果 13 (3, 4, 5) {'aa': '你好', 'bb': '我很好'}
func(1,2,3,4,5,e=20,aa="你好",bb="我很好")# 结果 23 (3, 4, 5) {'aa': '你好', 'bb': '我很好'} 
global函数
#全局变量 在函数外面的定义的变量为全局变量 全局变量作用域在整个python文件模块
#局部变量 在函数内部定义的变量叫做局部变量 局部变量作用域值在函数内部
a=15 # 全局变量
def func1():
    b=10  # 局部变量 只在这个函数内部有用
    return a+b
num=func1()
print(num) #结果 25

def func2():
    print(b)
func2()# 这个时候会报错 因为b只在func1中有定义 而在func2中没有定义

# 函数内部声明global 将局部变量变为全局变量
def func1():
    global b # 这个时候b是一个全局变量了
    b=10  
    return b
num=func1()
print(num) # 10

def func2():
    print(b)
func2() #10 # 这个时候func2可以直接用变量b

# 对全局变量进行修改
a=10
def func():
    a+=1 
    print(a)
func() # 报错 #因为a为全局变量 函数是不能够修改全局变量的
# 加global 对全局变量进行修改
a=10
def func():
    global a 
    a+=1 
    print(a)
func() # 11 # 这个时候不报错  

def func():
    a=10 # a为局部变量 但是a对于inner1 和inner2函数来说是一个全局变量 两个函数都可以用 即a的作用域为整个func函数
    def inner1(): # 
        b1=10   # b1为inner1里面的变量 为局部中的局部变量 b1的作用域为 inner1函数 这个时候inner2 不能使用b1 变量
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值