daguo118

函数入门

函数的作用

  • 函数就是将一段具有独立功能的代码块整合到一个整体并命名在需要的位置调用这个名称即可完成对应的需求。
  • 作用:封装代码,实现代码重用,减少内存空间,方便代码的管理和维护

函数的使用

  • 定义函数

    def 函数名称(参数):
        代码1
        代码2
        ......
        return 返回值
    
  • 在定义函数时,如果暂时还没想法可以用pass进行跳过

  • 使用函数:函数名称(参数)

ps:1)根据不同的需求参数可有可无;2)函数必须先定义再调用

函数的参数

  • 形参:是指出现在函数定义中的名称,定义了一个函数能接受何种类型的实参。
  • 实参:则是在调用函数时实际传入的值。

参数的分类

(1)根据实参进行分类

  • 位置参数 (未命名参数)
def func(a,b,c):
    print(a)
    print(b)
    print(c)
      
func(11,22,33)
#运行结果
11
22
33
上述案列中的函数的三个形参是按位置接收传入的实参,我们把这样的传参的形式叫做位置参数,
  • 关键字参数 (命名参数)
def func(a,b,c):
    print(a)
    print(b)
    print(c)
      
func(11,c=99,b=33)
#运行结果
11
33
99
调用函数函数的时候,实参通过参数名指定传给某个形参,这样的传参形式,我们把它叫做关键字参数
注意:传参的时候先写位置参数,再写关键字参数

(2)根据形参进行分类

  • 必备参数
# 在调用函数的时候必须要传的参数
def add(a,b):
    c = a + b
    print(c)
     
add(11,22)
# 上面函数中的a,b就是必备参数,在调用的函数的时候必须要传,不然就会报错
  • 默认参数
# 调用函数的时候可以传可以不传,不传就用默认值
def func(a,b,c=99):
    print(a)
    print(b)
    print(c)
func(11,22,33)
print('-----------')
func(55,66)
# 注意:带有默认值的参数一定要位于参数列表的最后面。
  • 不定长参数 *args
    • *args:接收多传入的位置参数,以元祖的形式保存
def func(*args):
  print(args)
 
func(33,44,55,66,77)
func(*(33,44,55,66,77))
 
#运行结果
(33,44,55,66,77)
(33,44,55,66,77)

*args,args接收的是一个元祖;
调用的时候可以直接传入:func(33,44,55,66,77),
也可以可以先组装list或tuple,再通过*拆包传入:func(*(33,44,55,66,77));
  • 不定长参数**kwargs
    • **kwargs:接收多传入的关键字参数,以字典的形式保存
def func(**kwargs):
    print(kwargs)
func(e=33,h=44,f=55,d=66,c=77)
func(**{'e':33,'h':44,'d':66,'c':77})
#运行结果
{'e': 33, 'h': 44, 'f': 55, 'd': 66, 'c': 77}
{'e': 33, 'h': 44, 'f': 55, 'd': 66, 'c': 77}

**kwargs,kw接收的是一个字典;
关键字参数既可以直接传入:func(11,22,e=33,h=44,f=55,d=66,c=77),
也可以先组装dict,再通过**拆包传入:func(**{'e':33,'h':44,'d':66,'c':77})。

注意点:使用*args和**kwargs是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。

函数的返回值

  • 每个函数都有以一个默认的返回值,return None,若需要返回其他值,将None修改为需要返回的值
  • return只能在函数里面使用,使用后将数据返回出去,并直接结束函数,且return不能打印数据,只能返回数据
  • 函数可以返回多个值,即return后可以跟多个参数,但函数本身返回只有一个值,其值为元组(压缩和解包)
  • 函数内可出现多个return,但只会起作用一个。若执行了return,意为这函数执行完退出了。

函数的帮助文档

  • 查看帮助文档:可以使用 help(函数名称)来查看函数的帮助文档

  • 编写帮助文档:在函数体中,输入三个双引号,回车,会自动弹出帮助文档的撰写。(若没有弹出,需要在pycharm进行设置,在File | Settings | Tools | Python Integrated Tools | Docstring format 这里改成你想要的格式,然后再回去看看三个引号。没有函数注释的情况下是plain。改成reStucturedText。

    # 自定义求和函数
    def my_sum(list_data):
        """
        对传入列表中的数据进行求和
        :param list_data: 列表
        :return: 列表数据的和
        """
        s = 0
        for i in list_data:
            s += i
    
        return s
    
    
    l1 = [1, 2, 3]
    print(my_sum(l1))   # 6
    
    # 查看帮助文档
    print(help(my_sum))
    """
    Help on function my_sum in module __main__:
    
    my_sum(list_data)
        对传入列表中的数据进行求和
        :param list_data: 列表
        :return: 列表数据的和
    
    None
    """
    

函数的嵌套调用

函数的嵌套:在函数里面还有函数。分为外函数和内函数。
嵌套函数是为函数内部服务的,比如减少代码的重复,想要调用函数,要使用函数名,内函数也一样。如果不用函数名调用内函数,内函数就永远不会执行。

# 怎么在函数外部调用内函数呢?首先,不能直接调用内函数 ,需要先执行外函数的代码块。
def func1():
    print("这是外部函数")
    def func2():
        print("这是内部函数")
func2() 
# 没有执行外函数内部的代码块,python找不到内函数,所以报name ‘func2’ is not defined,
# 函数func2()没有定义
# 有几种方式可以实现对内函数的调用。
1.在外函数内部调用内函数,即用函数名调用
def func1():
    print("这是外部函数")
    def func2():
        print("这是内部函数")
    func2() #函数名调用内函数
func1() 
2.可以用return调用内函数
def func1():
    print("这是外部函数")
    def func2():
        print("这是内部函数")
    return func2
func1()() # 执行func1()会返回func2,然后再func2()
# m = func1()
# m()


# 在一个函数里面调用别的函数
def print1():
    print("这是第一个函数")
def print2():
    print("这是定义的第二个函数")
    print1() # 在print2()中调用print1()
print2()

相关文章: