首页 > 编程语言 > 详细

04-Python的函数1

时间:2019-07-16 17:26:07      阅读:71      评论:0      收藏:0      [点我收藏+]

# 函数

## 函数定义:

- 函数可以看出是语句的集合,通过函数调用来执行其包含语句。
- Python利用函数提高代码的重用率,减少了代码冗余。
- 基本格式:
  def 函数名(参数表):
    函数语句
    return 返回值

  * 参数和返回值都不一定是必须有的,Python运行函数没有参数和返回值。
  * 函数代码块以 def 关键词开头,后接函数标识符名称、圆括号()、冒号。
  * 函数内容以冒号起始,并且缩进。
    * 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
    * 函数语句必须要有缩进。

# 文档注释
def Fun1(a,b):
    """
    函数功能:计算两个数的和。
    参数a:
    参数b:
    返回值为两个数的和
    """
    pass
    return a+b
# 查看文档的两种方式:help()、fun.__doc__
help(Fun1)
# print(Fun1.__doc__)
#####################################################
# 结果
Help on function Fun1 in module __main__:

Fun1(a, b)
    函数功能:计算两个数的和。
    参数a:
    参数b:

  * return [表达式] 结束函数,
    * 选择性地返回一个值给调用方,可以返回多个值。
    * 不带表达式的return相当于返回 None。

# 有返回值
def Fun1():
    a = "这是返回值"
    return a
# 无返回值None
def Fun2():
    pass
# 多个返回值
def Fun3():
    a, b = 1, 2
    return a,b    
print(Fun1())
print(Fun2())
print(Fun3())
########################
# 结果
这是返回值
None
(1, 2)

- 创建函数

# 创建函数
# 注意:函数没有被调用是不会被执行的
# 1.创建有参数和返回值的函数
def MyFirstFun(a):
    print("这是函数")
    print("这是函数的参数%s"%a)
    return a
# 2.创建没有参数和返回值的函数
def MSecdonFun():
    pass

## 函数的简单调用

def MyFirstFun(a):
    print("这是函数")
    print("这是函数的参数%s"%a)
    return a
def Fun2():
    print("我被调用了")
    
# 1.直接使用函数名,可以返回函数名变量的内存地址
print(MyFirstFun)
print("1",‘--‘*20)
# 2.函数名后面跟括号
Fun2()
print(‘2‘,‘--‘*20)
MyFirstFun(5)
print(‘3‘,‘--‘*20)
# 3.通过变量名调用
x = MyFirstFun
x(66)
# 结果
<function MyFirstFun at 0x0000026BB15D7D90>
1 ----------------------------------------
我被调用了
2 ----------------------------------------
这是函数
这是函数的参数5
3 ----------------------------------------
这是函数
这是函数的参数66

## 函数的参数

- 定义:
  - 形参(形式参数):定义函数的时候,参数表中各个参数称为形式参数(只是一个占位符)。
  - 实参(实际参数):在调用函数时,参数表中提供的参数称为实际参数。
    - 注意:实参传递个形参就是将对象的引用赋值个形参。

- 分类:
  - 位置参数
    - 定义时直接定义变量名,调用时直接把变量或者值放入指定的位置

    - 定义: def 函数名 (参数1,参数2,参数3,···):

    - 调用 : 函数名(v1, v2,v3,···)

    - 注意:调用时赋值要参数按位置赋值

# 单个位置参数的函数
def Fun1(v1):
    print(v1)   
f1 = Fun1("abc")  # 运行函数Fun1
# 多个位置参数的函数
def Fun2(v1, v2, v3):
    print(v1, v2)
    return v3
f2 = Fun2(1, 2, "edf")  # 运行函数Fun2
print(f2) # 返回函数Fun2的值
# 结果
abc
1 2
edf

  - 默认参数

    - 形参带有默认值,调用时候,如果没有相对应形参赋值,则使用默认值。

    - 定义:def 函数名(p1=v1, p2=v2,···):

    - 调用:func_name()

    - 注意:

        *  默认参数可以简化函数的调用。但是设置默认参数是需要位置参数在前,默认参数在后。

          - 例如 :def Fun1(v1, v2=5, v3):   这样系统还会报错。

        * 当函数有多个参数时,把变化大的参数放在前面,变化小的放在后面,变化小的参数就可以作为默认参数。

        * 默认参数必须指向不变的对象。

        * 使用关键字参数,可以不考虑参数位置。

# 1.默认参数只有默认参数
def Fun1(v1=3, v2=3, v3=6):
    s = v1 + v2 * v3
    return s
v1 = Fun1()  # 不需要传递参数
# 2.位置参数和默认参数配合使用
def Fun2(v1, v2=3, v3=6):
    s = v1 + v2 * v3
    return s
v2 = Fun2(10)  # 把位置参数的值传递进去
# 3.位置参数和默认参数配合使用
def Fun3(v1, v2=3, v3=6):
    s = v1 + v2 * v3
    return s
v3 = Fun3(10, v2=0)  # 修改默认参数
print(v1, v2, v3)
# 结果
21 28 10
# 注意:
# 默认参数必须指向不变的对象
def Fun1(l1 = []):
    l1.append("end")
    return l1
Fun1() 
print(Fun1()) 
# 参数l1也是一个变量,指向对象[]
# 每次调用函数,l1就被改变一次
# 结果
[‘end‘, ‘end‘]

 

  - 可变参数

    - 允许传入0个或任意个参数,内部组装成元组。
    - 定义:def func(*args):
    - 调用:func(p1, p2, p3, ....)

def Fun1(*args):
    for i in args:
        print(i)
Fun1() # 允许传递0个参数
l = [1, 2, 3]
t = ("a", "b", "c")
Fun1(l, t, 888) # 允许传递多个参数,不包括包含关键字的参数
# 结果
[1, 2, 3]
(‘a‘, ‘b‘, ‘c‘)
888

  - 关键字参数
    - 允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为字典。
    - 定义:def func(**kargs):
    - 调用:func(p1, p2, p3, ....)

def Fun1(**kargs):
    for i in kargs.items():
        print(i)
    return kargs
Fun1() # 允许传递0个参数
v = Fun1(name = "China", age = 5500, num = 56) # 允许传递多个参数,不包括包含关键字的参数
print(v) # 内部组成字典

# 结果
(‘name‘, ‘China‘)
(‘age‘, 5500)
(‘num‘, 56)
{‘name‘: ‘China‘, ‘age‘: 5500, ‘num‘: 56}

  - 命名关键字参数:

    - 用来限制关键字参数的名字

    - 定义;def 函数名(v1,  v2, *, v3, v4)

    - 在 * 后面的参数都必须以关键字形式传入,否则报错

# 第一种形式
def Fun1(name, age, *args, job, num=2 ):
    print(name, age, args, job, num)

# *后面的以关键字形式传进去,num是默认参数了,不需要在传进去(可修改)
v1 = Fun1("xiaoming", 18, "None1", job="worker")

# 第二种形式
def Fun2(name, age, *, job, n ):
    print(name, age, job, n)
v2 = Fun2("sss", 22, job="worker",n=555)   

# 结果
xiaoming 18 (‘None1‘,) worker 2
sss 22 worker 555

  - 参数组合调用顺序:必须参数、默认参数、可变参数、关键字参数、命名关键字参数

def Fun1(name, age,*agrs, hoby="没有", **kwargs):
    print("我是{0},我今年{1}岁".format(name,age))
    if hoby == "没有":
        print("没有爱好")
    else:
        print("我的爱好是{0}".format(hoby))
    for k,v in kwargs.items():
        print(k, "---", v)
    print("--" * 15)    
    
name = "xiaoming"
age = 18

#调用不同格式
Fun1(name, age)  # 位置参数
Fun1(name, age, hoby="swiming")  # 修改默认参数,*agrs和**kwagrs没有接受参数
Fun1(name, age, "args1", "args2", hoby1="a", hoby2="b", hoby3="c")
# 分别传入可变参数*agrs和关键字参数**kwargs
# "args1"和"args2"传给*args, boby1、hoby2、boby3传给**kwagrs
Fun1(name, age, "args1", "args2", hoby1=[1, 2, 3]) 
Fun1(name, age, "args1", "args2", hoby=("ssss","sss","ss"))
# 结果
我是xiaoming,我今年18岁
没有爱好
------------------------------
我是xiaoming,我今年18岁
我的爱好是swiming
------------------------------
我是xiaoming,我今年18岁
没有爱好
hoby1 --- a
hoby2 --- b
hoby3 --- c
------------------------------
我是xiaoming,我今年18岁
没有爱好
hoby1 --- [1, 2, 3]
------------------------------
我是xiaoming,我今年18岁
我的爱好是(‘ssss‘, ‘sss‘, ‘ss‘)
------------------------------

  

04-Python的函数1

原文:https://www.cnblogs.com/cmn-note/p/11194032.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!