python中的函数

一. 函数的定义

1. 函数的定义:

1) 具备某一功能的代码段

2) 可以重复使用

2. 函数定义语法:

def 函数名称():
    函数体(实现功能的代码段)


注意:函数体的缩进

二. 函数的调用

1. 没有参数:函数名称()

实例1:

#定义函数
def hello():
    print("Hello World!")

#调用无参函数
hello()


运行结果:
Hello World!

2. 有参数:函数名称(参数值)

实例2:

#定义函数
def welcome(name):
    print("Welcome", name)

#调用有参函数
welcome("student")


运行结果:
Welcome student

三. 函数的参数

1. 形参

形参:形式参数。定义函数时,使用形参,相当于占位符。目的是用来接收调用该函数时传递的参数,告诉使用者,需要提供的数据有哪些

2. 实参

实参:调用函数时,是传入的参数,必须是确定的值

四. 函数的参数类型

1. 位置参数:按照形参顺序,放入实参

#定义函数
def print_info(name, age):
    print("名字: ", name)
    print("年龄: ", age)

#调用print_info函数
print_info("Jack", 30)


运行结果:
名字:  Jack
年龄:  30

2. 关键字参数(指定参数):不用按形参顺序放入实参,传参时要求:形参名称=实参值

#定义函数
def print_info(name, age):
    print("名字: ", name)
    print("年龄: ", age)

#调用print_info函数
print_info(age=30, name="Jack")


运行结果:
名字:  Jack
年龄:  30

3. 默认参数:在定义函数时,给形参一个默认值,需要放在形参的最后,当调用函数时,默认参数的值可传可不传,不传时,使用默认值

#定义函数
def print_info(name, age=28):
    print("名字: ", name)
    print("年龄: ", age)

#调用print_info函数
print_info("Jack")

print_info("Jack", 30)


运行结果:
名字:  Jack
年龄:  28

名字:  Jack
年龄:  30

必须注意:默认参数必须指向不可变对象:整数、字符串、元组

#定义一个默认参数指向可变对象列表的函数
def add_end(L=[]):
    L.append('END')
    print(L)

#调用add_end函数
add_end()

add_end()

add_end()


运行结果:

['END']

['END', 'END']

['END', 'END', 'END']

这是因为python函数在定义的时候,默认参数L的值就被计算出来了,为[]。默认参数L是一个变量,它指向对象[],每次调用该函数时,如果改变了L的内容,下次再调用时,默认参数的内容就变了,不再是函数定义时的[]了

4. 可变参数(动态参数):在定义函数时,不限定参数的个数,可用*args和**kwargs表示

*args 为元组,比如print()函数的参数就是*args

**kwargs为字典,比如requests库的request()方法的参数就是**kwargs

*args将参数打包成tuple给函数体使用

#定义函数
def print_info(name, age, *args):
    print(name)
    print(age)
    print(args)
    for item in args:
        print(item)

#调用print_info函数
print_info("Jack", 30, "male", "running")


运行结果:
Jack
30
('male', 'running')
male
running

**kwargs将参数打包成dict给函数体使用,调用时实参是key=value的形式

#定义函数
def print_info(name, age, **kwargs):
    print(name)
    print(age)
    print(kwargs)
    for key, value in kwargs.items():
        print(key + ":" + value)

#调用print_info函数
print_info("Jack", 30, sex="male", hobby="reading")


运行结果:
Jack
30
{'hobby': 'reading', 'sex': 'male'}
hobby:reading
sex:male

5. 参数组合:当多种参数组合使用时,参数定义的顺序为:位置参数(关键字参数)、默认参数、可变参数

#定义函数
def print_info(name, age, sex="male", **kwargs):
    print("name:" + name)
    print("age:" + str(age))
    print("sex:" + sex)
    for key, value in kwargs.items():
        print(key + ":" + value)

#调用print_info函数
print_info("Jack", 30, hobby="reading", city="shenzhen")

print_info(sex="female", age=20, name="Lucy",hobby="reading", city="shenzhen")


运行结果:
name:Jack
age:30
sex:male
hobby:reading
city:shenzhen


name:Lucy
age:20
sex:female
hobby:reading
city:shenzhen

五. 匿名函数

1. python使用lambda来创建匿名函数

所谓匿名,也就是没有函数名,不再使用def 函数名 这样标准的形式定义一个函数

2. lambda与标准函数的区别

1) lambda只是一个表达式,而不是一个语句

作为一个表达式,lambda可以返回一个函数,可以赋值给变量,而不像def那样在头部将函数赋值给变量名(函数名)

2) lambda的主体是一个表达式,而不是一个代码块

因此,lambda通常要比def功能小,仅能在lambda主体中封装有限的逻辑进去,连if这样的语句都不能够使用。这是有意设计的——它限制了程序的嵌套:lambda是一个为编写简单的函数而设计的,def用来处理更大的任务

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

3. lambda函数的语法

lambda arg1, arg2, ... argN: expression

实例1:可以将lambda函数对象赋值给变量 f 

#定义lambda函数,将其赋值给变量f
f = lambda x, y, z: x + y + z
#通过变量f来调用函数,并打印结果
print(f(2, 3, 4))


运行结果:
9

实例2:在lambda函数中也可以使用默认参数

#定义lambda函数,使用默认参数
x = lambda a = "fee", b = "fie", c = "foe": a + b + c
#通过变量x来调用函数,并打印结果
print(x())


运行结果:
feefiefoe

六. 返回值

1. 语法:

return 参数(可选,没有参数,则返回None)

2. 注意:

1) 返回值可以是任何类型的变量

2) 返回值也可以是表达式

3) 可以返回一个/多个变量,可以用逗号隔开或用元组

def func():       
     return 返回值1,返回值2

接收值1,接收值2 = func()
print(接收值1,接收值2)

4) 函数体执行过程中遇到return,意味着函数调用结束

5) 函数中没有return关键字,默认返回None

6) 使用较多,返回的值可以用来传递给其他函数

 

 

 

参考文章

http://www.runoob.com/python3/python3-function.html

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000

 

posted @ 2018-06-26 17:48  cnhkzyy  阅读(370)  评论(0编辑  收藏  举报