10函数基础和进阶

image

#函数
##01函数基础
###1.定义函数和调用
def 函数名([输入参数]):
函数体

def say_hi():
	print("你好")
	print("很高兴认识你")
	return "小姐姐","萝莉","御姐"
girl = say_hi()
print(girl)

image
注意:1.return 返回的是元组(tuple),返回给调用者。2.函数执行遇到return不会继续向下执行 3.如果return什么都不写,返回的结果就是None

函数的调用:函数名()就可以调用函数
###2.函数的参数
函数()内的就是参数
####参数的分类
1.形参:写在函数声明的位置的变量叫形参,形式上是一个完整的,表示这个函数需要的具体内容 2.实参:在函数调用时给函数传递的值,实际执行的时候给函数传递的信息,表示给函数具体的内容 3.传参:给函数传递信息的时候将实际参数交给形式参数的过程叫做传参
位置参数
def eat(chat,addr,age): # 三个形参 聊天工具 地址 年龄 print("拿出手机") print("打开" + chat) print(str(age) + "岁的"+ "小姐姐") print("要不要一起去" + addr + "吃饭") eat("微信","青岛",18) # 实参

三元运算符

    c = a if a > b else b # 当a > b赋值给c 否则就把b赋值给c
    return c
print(f(1,9)) # 9

关键字传参

    print("拿出手机")
    print("打开" + chat)
    print(str(age) + "岁的"+ "小姐姐")
    print("要不要一起去" + addr + "吃饭")
eat(chat = "微信",addr = "青岛",age = 18) # 实参

混合参数

    print("拿出手机")
    print("打开" + chat)
    print(str(age) + "岁的"+ "小姐姐")
    print("要不要一起去" + addr + "吃饭")
eat("微信",addr = "上海",age = 18)

关键字参数后面只能是关键字参数,位置参数必须放在关键字参数的前面

默认值参数

def stu_info(name,age,sex = "男"): # 学生信息  默认参数必须写在最后面
    print(name,age,sex)
    return sex,"录入完毕"
a = stu_info("张强","18")
print(a)

动态接收关键字参数
在参数位置用*表示接受任意参数

打包(成元组,字典或者列表)和解包(拆解成单个元素)
**用于字典的打包和解拆 用于元组和列表的打包和解包(非关键字参数传参)

def tuple_pack(a,*b):
    print(a)
    print(b)
tuple_pack(1,2,3) # 1 (2, 3)
def dict_pack(a,**b): # 只能用关键字传参
    print(a)
    print(b)
# dict_pack(1,2,3) # 报错
dict_pack(1,one = 1,two = 2,three = 3) # 1 {'one': 1, 'two': 2, 'three': 3}

def tuple_dict_pack(a,*b,**c):
    print(a)
    print(b)
    print(c)
tuple_dict_pack(1,2,3,one = 1,two = 2,three = 3) #1 (2, 3) {'one': 1, 'two': 2, 'three': 3}

#拆解
def tuple_dict_unpack(*a,**b):
    print(a)
    print(b)
ee = (1,2,3)
ff = {"one":1,"two":2,"three":3}
tuple_dict_unpack(*ee,**ff) # (1, 2, 3) {'one': 1, 'two': 2, 'three': 3}

02函数进阶

###1.动态接收位置参数

def eat(*a):# 在定义函数时用打包
    print("我想吃",a)
    print(*a) # 在函数体内用解包
eat("米饭","中米饭")

def eat(a,b,*c):
    print("我想吃",a,b,c)
    print(*c)
eat("大米饭","小米饭","米饭") # 我想吃 大米饭 小米饭 ('米饭',) 米饭

###默认值参数

def eat(a,b,*c,d = "白菜"): # 默认值参数必须放最后面 否则会被覆盖
#     print("我想吃",a,b,c,d)
#     print(*c)
# eat("大米饭","小米饭","米饭")
# 形参的顺序 位置参数 动态参数 默认参数
# 位置参数 > args(动态位置参数) > 默认值参数 > kwargs(动态关键字参数)

动态接收关键字参数

def fun(**a):
    print(a)
fun(a = 1,b = 2) # {'a': 1, 'b': 2}

def func(a,b,c,d):
    print(a,b,c,d)
func(1,2,c = 3,d = 6) # 1 2 3 6

###想要接收所有的参数

def func(*args,**kwargs):
    print(args,kwargs)
func(1,23,4,a = 1,b = 2) # (1, 23, 4) {'a': 1, 'b': 2}

###动态参数的传参

# 方法一
lst = [1,4,7]
def func(*args):
    print(args)
func(lst[0],lst[1],lst[2]) # (1, 4, 7)

# 方法二
def func(*args):
    print(args)
func(*lst) # (1, 4, 7) # 在实参的位置上用*将lst(可迭代对象)  在形参的位置上用*把收到的参数组合成一个元组

# 字典也可以打散 用**
dic = {"a":1,"b":2}
def fun(**kwargs):
    print(kwargs)
fun(**dic) # {'a': 1, 'b': 2}

###函数的注释
def eat(food,drink):
“”"
这里描述当前函数式用来干什么的
:param food: food这个参数是什么意思,用来接收什么?食物
:param drink:
:return: 函数执行完返回给调用者的具体的内容
“”"
print(food,drink)
return “星期三”
print(eat(“麻辣汤”,“coco”)) # 麻辣汤 coco 星期三

在外部查看函数内注释
print(eat.doc)

###名称空间
def fun():
a = 10
print(a)
fun() # 10
命名空间 存放名字和值的关系的空间
分类:
全局命名空间:我们直接在python文件中,函数外声明的变量
局部命名空间:在函数中声明的变量
内置命名空间:存放python解释器为我们提供的名字 list(),tuple(),str,int,这些都是内置命名空间 关键字不是
import keyword
print(keyword.kwlist) [‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘async’, ‘await’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]
import builtins # 内置函数
print(dir(builtins))

加载顺序:内置命名空间———>全局命名空间————>局部命名空间
取值顺序:局部命名空间数值————>全局————>内置
a = 10
def func():
a = 20
print(a)
func() 20 先去20后取10

作用域:作用范围,按照生效范围分为 全局作用域和局部作用域

#全局作用域:包括内置命名空间和全局作用空间,在整个文件的任何位置都可以使用(遵循从上到下逐行执行)
#局部作用域:在函数内部执行

作用域命名空间
全局作用用域:全局命名空间+内置命名空间
局部作用用域:局部命名空间

a = 10
def func():
    a = 40
    b = 20
    print("哈哈")
    print(a,b)
    print(globals()) # 打印全局作用用域中的内容
    print(locals()) # {'a': 40, 'b': 20}
func()

###函数嵌套
只要遇到了()就是函数的调用,如果没有就不是调用

def func1():
    print(111)
def func2():
    print(222)
    func1()
    def func3():
        print(666)
    print(444)
    func3()
    print(8888)
func2()


# global 全局声明变量  global宗旨:在函数内部修改全局的变量,如果全局不存在就创建一个变量
# lst = ["马化腾","刘嘉玲","詹姆斯"]
# def func():
#     lst.append("马云")
#     # 对于可变数据类型可以直接进行访问
# func()
# print(lst)



# nonlocal 非局部声明变量 宗旨:只修改上一层变量,如果上一层没有变量就再往上找一层,只会找到函数的最外层,不会找到全局进行修改
# a = 10
# def func1():
#     a = 20
#     def func2():
#         nonlocal a  #改了a = 20
#         a = 30
#         print(a)
#     func2()
#     print(a)
# func1() # 加nonlocal 结果为30 30   不加结果为30 20
a = 1
def fun1():
    a = 2
    def fun2():
        nonlocal  a
        a = 3
        def fun3():
            a = 4
            print(a)
        print(a)
        fun3()
        print(a)
    print(a)
    fun2()
    print(a)
print(a)
fun1()
print(a)![image](https://img2022.cnblogs.com/blog/2787076/202204/2787076-20220420233309968-1881174593.jpg)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小熊佩萁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值