page contents

Python函数基础

Python函数基础超详细讲解!

函数基础

  • 函数入门

  • 函数参数

  • 函数返回值

  • 函数嵌套

1.函数入门

1.1函数简介

概念:函数是组织好的,可重复使用的,用来完成具体功能,且带有名字的代码段

功能:使用函数可以提高编写的效率以及代码的重复利用率。需要在程序中多次执行同一项任务时,你无需反复编写完成该任务的代码,而只需调用该任务的函数,让python运行其中的代码;通过使用函数,程序编写,阅读,测试和修复都将更容易

分类:你已经知道Python提供了许多内建函数,比如print()、input()等,但你也可以自己创建函数,这被叫做自定义函数

1.2函数定义(封装独立的功能)

定义一个有自己想要功能的函数,需要遵循以下规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号( )

  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数

  • 函数的第一行语句可以选择性地使用文档字符串(注释)————用于存放函数说明

  • 函数内容以冒号 : 起始,并且缩进

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

注:函数名称的命名应该符合标识符的命名规则

  • 由字母,下划线和数字组成

  • 不能以数字开头

  • 不能与关键字重名

  • 简单且具有描述性

py-tup-10-26-1.png

函数格式:

def 函数名(参数列表):
  函数体
# 定义简单函数
def greet_user():
   """显示简单的问候语"""
   print("Hello!")


# 调用函数
greet_user()

1.3函数调用(享受封装的成果)

调用函数也就是执行函数。如果把创建的函数理解为一个具有某种用途的工具,那么调用函数就相当于使用该工具

  1. 无返回值、无参数:greet_user()

  2. 无返回、有参数:greet_user(a, b)

  3. 有返回值、无参数:text = greet_user() 或者 print(greet_user())

  4. 有返回值、有参数:text = greet_user(a, b) 或者 print(greet_user(a, b))

2.函数参数

2.1形参和实参

  • 形参:定义函数时,小括号中的参数,是用来接收参数用的,在函数内部作为变量使用

  • 实参:调用函数时,小括号中的参数,是用来把数据传递到函数内部用的,作为形参的值

2.2传递实参

  • 函数定义中可能包含多个形参,因此函数调用中也有可能包含多个实参,之间都用逗号隔开

  • 缺少必要的实参,或者传递的实参多余,都会引发异常

  • 传递实参的方法也有多种

  1. 位置实参:基于实参的顺序,一一对应于形参。实参的顺序很重要

  2. 关键字实参:传递给函数的名称值对。因为直接在实参中将名称和值关联起来了,所以向函数传递实参时不会混淆,也无需考虑函数调用中实参的顺序

    # 参数传递
    def describe_pet(animal_type, pet_name):
       """显示宠物的信息"""
       print(f"I have a {animal_type}.")
       print(f"My {animal_type}'s name is {pet_name.title()}.\n")


    # 位置实参
    describe_pet('hamster', 'harry')  # 正确的位置实参
    describe_pet('harry', 'hamster')  # 位置实参顺序不对,导致结果有误
    describe_pet('hamster')  # 因为缺少必要实参而出现异常
    describe_pet('harry', 'hamster', 'dog')  # 因为实参多余而出现异常

    # 关键字实参
    # 交换顺序不影响结果
    describe_pet(pet_name='harry', animal_type='hamster')
    describe_pet(animal_type='hamster', pet_name='harry')
  3. 默认值:编写函数时,可给每个形参指定默认值。若函数调用中给该形参提供了实参,将使用提供的实参;否则将使用形参的默认值;注意:使用默认值时,必须先在形参列表中列出没有默认值的形参,再列出有默认值的实参,这让Python依然能够正确地解读位置实参,否则会出错

    # 默认值
    # 正确使用默认值
    def describe_pet(animal_type, pet_age, pet_name='harry'):
       """显示宠物的信息"""
       print(f"I have a {animal_type}.")
       print(f"My {animal_type}'s name is {pet_name.title()}.")
       print(f"My {animal_type}'s age is {pet_age}.\n")


    describe_pet('dog', 2)

    # 错误使用默认值
    def describe_pet(pet_name='harry', animal_type, pet_age):
       """显示宠物的信息"""
       print(f"I have a {animal_type}.")
       print(f"My {animal_type}'s name is {pet_name.title()}.")
       print(f"My {animal_type}'s age is {pet_age}.\n")

    describe_pet('dog', 2)
    describe_pet(animal_type='dog', pet_age=2)
  4. 混合使用位置实参、关键字实参和默认值:通常会有多种等效的函数调用方法

    注意:关键字实参必须要放在位置实参后面,否则会出错

    # 混合使用位置实参、关键字实参和默认值
    def describe_pet(animal_type, pet_name='harry'):
       """显示宠物的信息"""
       print(f"I have a {animal_type}.")
       print(f"My {animal_type}'s name is {pet_name.title()}.\n")


    # 多种等效的函数调用
    # 1.位置实参混合默认值
    describe_pet('dog')
    describe_pet('dog', 'harry')

    2.关键字实参混合默认值
    describe_pet(animal_type='dog')
    describe_pet(animal_type='dog', pet_name='harry')
    describe_pet(pet_name='harry', animal_type='dog')

    # 3.位置实参、关键字实参混合默认值
    # 错误用法,形参animal_type获取了两个值
    describe_pet('harry', animal_type='dog')

    # 错误用法,位置实参在关键字实参后面
    describe_pet(animal_type='dog', 'jack')

    # 正确用法
    describe_pet('dog', pet_name='jack')

3.函数返回值

3.1返回值简介

  • 概念:函数返回的值,标志着函数的结束

  • 格式:return 【返回值】

  • return 语句的作用:结束函数调用、返回值

  • 简单介绍 print 和 return 的区别,print 仅仅是打印在控制台,而 return 则是将 return 后面的部分作为返回值,也就是函数的输出,可以用变量接走,继续使用该返回值做其它事

  • 函数需要先定义后调用,函数体中 return 语句的结果就是返回值。如果一个函数没有 return 语句,其实它有一个隐含的 return 语句,返回值是 None(为空),类型也是 'None-type',与 return 、return None 等效,都是返回 None

3.2返回值拓展

由于前面已有无返回值的例子,此处不再赘述

  1. 单个返回值

    # 1.单个返回值
    def showplus(x):
       print(x)
       return x + 1


    num = showplus(6)  # 运行函数调用的同时输出 x 的值
    add = num + 2
    print(add)
  2. 多个返回值

    # 多个返回值
    def showplus(x):
       if x < 3:
           return x + 1
       elif (x >= 3) and (x <= 5):
           return x
       else:
           return x + 1
  3. return 只能返回一个值,但值可以存在多个元素

  • return [1, 3, 5] 是指返回一个列表,是一个列表对象,1,3,5 分别是这个列表的元素

  • return 1, 3, 5 看似返回多个值,隐式地被Python封装成了一个元祖返回

    # 返回列表或元组
    def showlist():
       return [1, 3, 5]  # 返回列表


    print(type(showlist()))
    print(showlist())


    def showtuple():
       return 1, 3, 5  # 返回元组


    print(type(showtuple()))
    print(showtuple())

4.函数嵌套

4.1函数嵌套

概念:在函数内部定义函数,分为内函数和外函数

作用:减少代码的重复率

最基本的函数嵌套格式:

def 函数名(参数列表):

  def 函数名(参数列表):
   
  函数体

函数嵌套例子:

def func1():
   print("这是外部函数")
   
   def func2():
       print("这是内部函数")

4.2调用内函数

怎么在函数外部调用内函数呢?首先,不能直接调用内函数 ,需要先执行外函数的代码块,其次按照下面的方法操作:

1.在外函数内部调用内函数,即用函数名调用,这样调用外函数也会执行内函数的代码块了

# 函数嵌套-调用内函数

# 1.函数名调用内函数
def func1():
   print("这是外部函数")
   
   def func2():
       print("这是内部函数")
       
   func2()  # 函数名调用内函数


func1()

2.用return调用内函数

  • 外函数内部"return 函数名()"调用内函数,与方法1的函数名()等效

# 2.1外函数内部"return 函数名()"调用内函数
def func1():
   print("这是外部函数")

   def func2():
       print("这是内部函数")

   return func2()


func1()
  • 外函数内部"return 函数名",也可以调用内函数,只不过调用外函数时多加一个括号

    需要说明一点:我们通常都是使用"函数名()“调用函数,单独使用"函数名”,我们会得到函数的内存地址;函数名后面加括号才会告诉python,参数是否对得上,然后执行函数的代码块

# 2.2外函数内部"return 函数名"调用内函数
def func1():
   print("这是外部函数")

   def func2():
       print("这是内部函数")

   return func2


# 执行func1()会返回func2,然后再执行func2()
func1()()

# 获取函数func2()的内存地址
m = func1()
print(m)

小结:想要调用内函数,首先要调用外函数,即执行外函数的代码块,才有内函数调用的环境。在外函数内部,可以用函数名调用内函数。也可以用return调用内函数,如果return是函数本身的地址,调用外函数时会用到双括号,先调用func1()得到func2然后再func2()。如果return func2(),那么和func2()是一样的,都是告诉python调用内函数

  • 发表于 2021-05-12 18:56
  • 阅读 ( 695 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Cara
Cara

36 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1320 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章