15、函数

函数分内置函数与自定义函数

自定义函数

#语法
def 函数名(参数列表):
    函数体

实例

#函数定义要在调用之前
#hello  world!
def hello():    #函数定义
    print("hello world!")

hello()          #函数调用

#求合
def sum_num(x):  #函数定义
    count = 0
    for i in range(x):
        count += i
    return count

print(sum_num(10))      # 45  函数调用

按值传参与按引用传参

#按值传参
def
change(x): x = 10 print(x) # 10 a = 1 change(a) print(a) # 1
按引用传参
def
change(x): x.append([4,5,6]) print(x) # [1, 2, 3, [4, 5, 6]] a = [1,2,3] print(a) #[1, 2, 3] change(a) print(a) # [1, 2, 3, [4, 5, 6]]

参数

必须参数:调用函数时必须传入一个参数,不然传报错

def change(x):
    x.append([4,5,6])
    print(x) 
change()   #TypeError: change() missing 1 required positional argument: 'x'

关键字参数:根据关键字匹配参数,不用与声明顺序相同

def printinfo(name, age):
    print(name)
    print(age)

printinfo(age=50, name="car")  #car 50

默认参数:没有传入参数刚使用默认值

def printinfo(name="char", age="27"):
    print(name,end=" ")
    print(age)

printinfo(age=26) #char 26

不定长参数:参数不确定数量,一个或者N个

def printinfo(arg1, *vartuple):  # *vartuple存入所有未命名的参数他是一个元组,如果没有指定则为空元组
    print(arg1)
    for var in vartuple:
        print(var)

printinfo(10) #10
printinfo(10,20,30,40) #10,20,30,40

匿名函数:使用lambda来创建,lambda只是一个表达式,比def简单

lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。

#求两数和
def sum(a,b):
    print(a+b)

sum(10,10) #20

sum = lambda a,b:a+b
print(sum(10,20)) #30

 动态参数

def show(*arg): #*arg默认为元组类型
    print(arg,type(arg))
show(1,2,3,4) #(1, 2, 3, 4) <class 'tuple'>

def show(**arg):  #**arg默认为字点类型
    print(arg,type(arg))
show(u=1,uu=2,uuu=3)   #{'u': 1, 'uu': 2, 'uuu': 3} <class 'dict'>

def show(*args, **kwargs):
    print(args,type(args))
    print(kwargs,type(kwargs))
l =[1,2,3,4]
d = {"u":1, "uu":2}
show(1,2,3,4,u=1,uu=2)
#(1, 2, 3, 4) <class 'tuple'>
#{'u': 1, 'uu': 2} <class 'dict'>

show(l,d)
#([1, 2, 3, 4], {'u': 1, 'uu': 2}) <class 'tuple'>
#{} <class 'dict'>

show(*l, **d)
#(1, 2, 3, 4) <class 'tuple'>
#{'u': 1, 'uu': 2} <class 'dict'>

s = "{0} is {1}"
result1 = s.format("alert", "sb")
print(result1) #alert is sb

l = ["alert", "sb"]
result2 = s.format(*l)
print(result2) #alert is sb


s = "{name} is {age}"
r1 = s.format(name="alert",age="sb")
print(r1) #alert is sb
d = {"name":"alert", "age":"sb"}

r2 = s.format(**d)
print(r2) #alert is sb
 
原文地址:https://www.cnblogs.com/jp-mao/p/6306525.html