day22 1.函数的基本使用 2.函数的参数 3.内置函数

day22

1.函数的基本使用

1.函数的使用原则:先定义,后调用
2.定义函数的三种格式:
def foo(): #无参函数
print('hello')

def foo(x,y):   #有参函数
    res = x + y

def spam():   #空函数
    pass

3.函数的返回值
def foo():
return 123
4.调用函数的三种格式
def foo():
return 123
foo() #直接调用
res = f00() * 10
print(res) #表达式的形式
print(foo()) #函数中调用其他函数


# 2.函数的参数

形参:函数定义阶段,括号内指定的参数(变量名)
实参:函数调用阶段,括号内传入的值(变量值)
关系:在函数调用时,会将实参值绑定给形参名,函数调用完毕后则解除绑定

#一 位置形参:
在函数定义阶段,按照从左到右的顺序依次定义的形参,称之为位置形参
特点:必须被传值
#二 位置实参:
在函数调用阶段,按照左到右的顺序依次传入的值,称之为位置实参
特点:按照顺序依次为形参赋值
#三 关键字实参
在函数调用阶段,按照key=value的格式来传值,称之为关键字实参
特点:可以打乱顺序,但仍能为指定的形参赋值
注意:可以混用位置实参与关键字实参,但是
1 位置实参必须跟在关键字实参前面
2 不能为同一个形参重复赋值
#四 默认形参
在函数定义阶段,就已经为形参赋值,称之为默认形参
特点: 定义阶段就已经有值了,意味着在调用阶段可以不用为其传值
注意:
1 可以混用位置形参与关键字形参,但是位置形参必须跟在默认形参的前面
2 默认形参的值推荐指向不可变类型
3 默认形参的值只在函数定义阶段被赋值一次
#五 可变长参数:*与**
在形参中带*: *会将溢出的位置实参值汇总成元组,然后赋值给紧跟其后的形参名
def foo(x,*y):  
    print(x,y)
foo(1)              #1
foo(1,2,3,4,5,6)    #1 (2,3,4,5,6)

在形参中带**: **会将溢出的关键字实参值汇总成字典,然后赋值给紧跟其后的形参名
def foo(x,**y):   
    print(x,y)
foo(1,a=111,b=222,c=333)  #1 y={"a":111,"c":333,"b":222}

在实参中带*
def foo(x, y, z):
    print(x, y, z)
foo(*[11, 22, 33])  # foo(11,22,33)
foo(*"hello")       # foo("h","e","l","l","o")

在实参中带**
def foo(x, y, z):
    print(x, y, z)
foo(*{"a":1,"b":2,"c":3})        # foo("a","b","c")
foo(**{"a": 1, "b": 2, "c": 3})  # foo(c=3,a=1,b=2)
foo(**{"x": 1, "z": 3, "y": 2})  # foo(y=2,z=3,x=1)
    
def index(a, b, c):
    print(a, b, c)

def wrapper(*args,**kwargs):  # args=(1,2,3)    kwargs={"x":111,"y":222,"z":333}
    index(*args,**kwargs)     # index(*(1,2,3),**{"x":111,"y":222,"z":333})
                              # index(1,2,3,x=111,y=222,z=333)

# wrapper(1, 2, 3, x=111, y=222, z=333)  错误
wrapper(1,c=3,b=2)            #1 2 3

#命名关键字参数
def foo(x,y,*args,m=666,n):
    print(x,y)
    print(m,n)
# foo(1,2,m=777,n=888)
# foo(1,2,n=999)
def foo(x,y=111,*args,m,n,**kwargs):
    pass
上一篇:day22(git的简单使用)


下一篇:Day22---学习Java第三弹