1、 基本知识:(12)功能,一,基础知识,函数


#参数类型
"""
(1)必选参数/位置参数
(2)默认参数
(3)可变参数
(4)关键字参数
格式顺序必须为:必选参数、默认参数、
可变参数\命名关键字参数、关键字参数
"""
#(1)必选参数/位置参数
def power(x):
    return x * x
power(5)
#这里的x就是必须要传入的参数,也是位置参数,须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
25
def power1(x, n):#这里的x,n就是位置参数
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s
power1(5,3)
125
#(2)默认参数
def power2(x, n=2):
"""
这里的n=2就是默认参数,必选参数在前,默认参数在后。
当默认参数不输入是,默认为2,当输入时以输入值为准
"""
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s
power2(5)
25
power2(5,4)
625
#可变参数:*args 是可变参数, args接收的是一个list 或 tuple;
def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
calc(1,2,5,6)

66
#*arg也是不定长度参数
def printinfo( arg1, *vartuple ): 
    print ("输出: ") 
    print (arg1) 
    print (vartuple) #返回的是一个元组
printinfo(70,60,50)
#注意函数调用,传参的时候并没有将60,50加括号()或者中括号[]
输出: 
70
(60, 50)
#关键字参数:**kw 是关键字参数, kw接收的是一个dict。
def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
extra = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, city=extra['city'], job=extra['job'])
#**kw参数个数不固定,注意这里的kw参数传入的方法是x = "y"
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
def f1(a, b, c=0, *args, **kw):
    print('a =', a,'\n' 'b =', b,'\n'  'c =', c, '\n' 'args =', args,'\n'  'kw =', kw)

#调用方式如下:
f1(1, 2)
a = 1 
b = 2 
c = 0 
args = () 
kw = {}
f1(1, 2, c=3)
a = 1 
b = 2 
c = 3 
args = () 
kw = {}
f1(1, 2, 3, 'a', 'b')
a = 1 
b = 2 
c = 3 
args = ('a', 'b') 
kw = {}
f1(1, 2, 3, 'a', 'b', x=99)
a = 1 
b = 2 
c = 3 
args = ('a', 'b') 
kw = {'x': 99}
def printinfo( arg1, **vardict ):
    print ("输出: ") 
    print (arg1) 
    print (vardict)#返回的是一个字典
printinfo(1, a=2,b=3)#注意传参的形式
输出: 
1
{'a': 2, 'b': 3}
#匿名函数lambda
#格式:lambda [arg1 [,arg2,.....argn]]:expression
f = lambda x: x * x
f(5)
25
#也可以把匿名函数作为返回值返回
def build(x, y):
    return lambda: x * x + y * y