Python--函数

Posted mr-chenshuai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python--函数相关的知识,希望对你有一定的参考价值。

函数解决的问题:

  • 代码可读性差
  • 代码冗余
  • 代码可扩展性差

 

什么是函数:

  • 在生活中,修车、盖房等等我们都会提前准备好工具,用的时候直接拿,可以一直用
  • 函数就是程序中的工具
  • 定义函数就是准备工具的过程

 

使用原则:

  • 函数必须先定义,再调用!!!!!就像变量定义一样,变量名指向变量名,函数名指向了内存中的函数名,所有必须定义了才能使用

 

函数分类:

  函数分为内置函数(如:len()、print()等等,都是Python事先定义好的,直接用即可)和自定义函数(就是自己写的)

print(max)    #   <built-in function max>

  


 

定义函数:

  语法

def 函数名([参数],[参数1]):
    """注释"""
    函数体
    return 返回值

  例:一个打印信息的函数

def print_msg():
    """打印信息"""
    print(‘这是一条信息‘)
 
print_msg()              # 这是一条信息
print_msg()              # 这是一条信息

  


 

三种函数形式:

  • 无参函数:  不需要调用者传参就能执行,如下该函数只是用来调用其他函数,用于控制逻辑
def main():
    foo(123)
    foo1(‘bone‘)
  • 有参函数:  需要调用者提供参数才执行
def foo(x,y):
    return x+y
  • 空函数:  函数体是pass,用于先把需要的功能占坑,实现程序结构体系,后续实现功能
def func():
    pass

  


 

函数的调用

  函数名加 ()  调用执行

# 调用无参函数,无需传值

def foo():
    foo(123)
    foo1(‘bone‘)
 
foo()


---------------------------------------------------------------

# 调用有参函数,必须提供参数

def foo():
    foo(123)
    foo1(‘bone‘)
 
foo()

  


 

返回值return:

  • 无return:  返回None
  • return 1个值:  返回1个值
  • return 逗号分隔多个值:  返回元组形式
  • 一个函数只能return一次
  • return执行了,就代表函数终止
什么时候该有返回值?
    调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值
    通常有参函数需要有返回值,输入参数,经过计算,得到一个最终的结果
什么时候不需要有返回值?
    调用函数,仅仅只是执行一系列的操作,最后不需要得到什么结果,则无需有返回值
    通常无参函数不需要有返回值

  


函数的参数

  形参、实参:

  • 形参就是定义函数时括号内的变量名;
  • 实参就是调用时传入的参数;

参数的使用:

  一、位置参数

def foo(x,y,z):
    print(x,y,z)
foo(3,6,9)                   # 3 6 9
 
# 位置形参:必需传参数
# 位置实参:按照位置给形参传值,从左到右一一对应

  二、关键字参数

def foo(x,y,z):
    print(x,y,z)
foo(3,z=6,y=9)    #  3 9 6
 
 
def foo(x,y,z):
    print(x,y,z)
foo(3,y=6,9)    #  SyntaxError: positional argument follows keyword argument
 
 
# 无需按照位置为形参传值
# 按照ket=value的形式指定传参
# 注意:
       # 1. 关键字实参必须在位置实参右面
       # 2. 对同一个形参不能重复传值 

  三、默认参数

def foo(z,x=2,y=3):
    print(x,y,z)
foo(x=6,z=8)    #  6 3 8
 
def foo(x=2,y=3,z):   # SyntaxError: non-default argument follows default argument
    print(x,y,z)
foo(x=6,z=8) 
 
# 注意:
        # 1. 只在定义时赋值一次
        # 2. 默认参数的定义应该在位置形参右面
        # 3. 默认参数通常应该定义成不可变类型

  四、可变长参数

def foo(*args, **kwargs):
    print(args, kwargs)
foo(6,9,a=1,b=2)          # (6, 9) {‘a‘: 1, ‘b‘: 2}
 
 
# 实参有按位置和按关键字两种形式定义,针对这两种形式的形参,对应有两种解决方案来# 完整地存放它们:*args,**kwargs # *和**用来接收参数,然后赋值给后面的是变量名
# 打包参数: # *用来接收位置实参,实参会按位置包在一个元组中 # **用来接收关键字实参,实参会被包在一个字典中 # 解包参数: # *用来解包列表或者元组,将单个元素传人函数(位置参数) # list1 = [1,2,3] # def foo(a,b,c): # print(a,b,c) # foo(*list1) # 1 2 3 # **用来解包字典,将键值对传入参数(关键字参数) # dict1 = {‘a‘: 1, ‘b‘: 2, ‘c‘: 3} # def foo(a, b, c): # print(a, b, c) # foo(**dict1) # 1 2 3

  五、命名关键字参数

def foo(a,*b,c=1,d):
    print(a, b, c,d)
foo(1,2,d=6)         # 1 (2,) 1 6
 
def foo(a,*b,c=1,d):
    print(a, b, c,d)
foo(1,2,6)         # TypeError: foo() missing 1 required keyword-only argument: ‘d‘
 
 
#  *后定义的参数,必须被传值(有默认值的除外),且必须按照关键字实参的形式传递

  


 

函数嵌套

# 嵌套定义

def f1():
    def f2():
        def f3():
            print(‘f3‘)
        f3()
    f2()
f1()                           # f3



# 嵌套调用
def max(x,y):
    return x if x > y else y
def max4(a,b,c,d):
    res1=max(a,b)
    res2=max(res1,c)
    res3=max(res2,d)
    return res3
print(max4(1,2,3,4))         # 4

  

 



以上是关于Python--函数的主要内容,如果未能解决你的问题,请参考以下文章

python使用上下文对代码片段进行计时,非装饰器

python 元组有用的函数,方法和片段。

Python代码阅读(第26篇):将列表映射成字典

VSCode自定义代码片段——声明函数

Python学习 :函数

VSCode自定义代码片段8——声明函数