Python(9)——Python入门之函数使用


前言

1、如何创建(定义)一个函数

def 函数名(参数列表):
    //实现特定功能的多行代码
    return [返回值]
  • 函数的输入叫参数, 函数的输出叫返回值。
  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(),任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 在创建函数时,即使函数不需要参数,也必须保留一对空的“()”
  • 如果想定义一个没有任何功能的空函数,可以使用 pass 语句作为占位符。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。在函数中,return后的代码都不会执行,return 一旦执行函数自动结束

创建一个函数,判断两个数的大小

def max(a,b):                  ##  函数名(参数列表), a,b为形参
    return a if a>=b else b    ##选择性地返回一个值给调用方

2、函数的调用

函数调用的基本语法格式:

  • [返回值] = 函数名([形参值])
    函数名即指的是要调用的函数的名称;形参值指的是当初创建函数时要求传入的各个形参的值。如果该函数有返回值,我们可以通过一个变量来接收该值,也可以不接受。
resault=max(2,5)  ##resault变量接受返回值
print(resault)    ##打印resault

3、参数的类型

参数的类型
       - 形参: 形式参数,不是真实的值(定义函数时的参数)
       - 实参:实际参数, 是真实的值(调用函数时的参数)
def max(a,b):           ## a,b为形参
    return a if a>=b else b
resault=max(2,5)        ## 2,5为实参
print(resault)

4、函数的注释

函数注释包括:

  • 参数注释:以冒号(:)标记
  • 返回值注释:以 -> 标记
  • 函数注释 在函数体中 “”" 填写功能说明 “”" 注释 填写对应功能即可
def max(a:int,b:int)->int: 
    """
    :param a: 整形a
    :param b: 整形b
    :return: 返回值为a和b中的最大值
    """
    if isinstance(a,int)and isinstance(b,int):
        return a if a>=b else b
    else:
        return 0
resault=max(2,5)
print(resault)
print(help(max)) ## 查看自定义函数的帮助
输出:
5
Help on function max in module __main__:

max(a: int, b: int) -> int
    :param a: 整形a
    :param b: 整形b
    :return: 返回值为a和b中的最大值

None

5、命名空间和作用域

5.1 命名空间

内置空间: 即python解释器自带的函数 类似 print input len
全局空间:当前py文件需要开辟的空间存放在全局空间
局部空间:函数中开辟的空间就是局部空间
加载顺序:内置空间–全局空间–局部空间
取值顺序:局部空间–全局空间–内置空间

5.2 变量的作用域

5.2.1 全局作用域

  • 全局作用域在程序执行时创建,在程序执行结束时销毁
  • 所有函数以外的区域都是全局作用域
  • 在全局作用域中定义的变量,都属于全局变量,全局变量可以在程序的任意位置被访问

5.2.2 函数作用域

  • 函数作用域在函数调用时创建,在调用结束时销毁
  • 函数每调用一次就会产生一个新的函数作用域
  • 在函数作用域中定义的变量,都是局部变量,它只能在函数内部被访问

5.2.3 全局与局部变量

  • 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
  • 当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

(1)全局变量: 全局生效的变量,函数外面的变量。

a=3  ##a为全局变量
def prt():
    return a
print(prt())
输出:3

(2)局部变量: 局部生效的变量,函数内部的变量。

a=3               ## 此处的a为全局变量
def prt():
    a=2           ## 此处的a为局部变量
    return a
print(prt())      ## 2
print(a)          ## 3

5.2.4 函数内部修改全局变量

  • 如果要在函数中修改全局的变量,不能直接修改。 需要用global关键字声明修改的变量是全局变量。
  • 不可变数据类型修改全局变量一定要global声明, 可变数据类型不需要。
    • 可变数据类型:list(列表), dict(字典),sets(集合)
    • 不可变数据类型: 数值型, str, tuple
a=3           ##不可变数据类型
user=[]       ##可变数据类型
def prt():
    global a   ## 声明a为全局变量
    a=2
    user.append('user1')
    print(a,user)
prt()         ## 2 ['user1']
print(a)      ## 2

6、python中常见的四类形参

6.1 必选参数

必须要传递的参数

def max(a,b):        ## 定义函数时指定形参
    return a if a>=b else b
resault=max(1,3)     ##  调用函数时,来传递实参
print(resault)

6.2 默认参数

可传可不传的参数,下边的函数中b为默认的参数,调用max函数时如果不指定b的值,此时b的值为默认值2;如果在调用函数时指定b的值,那么指定的b的值将会覆盖b的默认值

def max(a,b=2):       ## 定义形参时,可以为形参指定默认值
    return a if a>=b else b
resault=max(1)
print(resault)
输出: 2
 def max(a,b=2):
    return a if a>=b else b
resault=max(1,5)
print(resault)
输出:5

6.3 可变参数

  • 参数的个数会变化,可以传0,1,2,3,…n
  • args是元组
def max(*args):
    return args
resault=max(1,5,6,7)
print(resault)
输出:
(1, 5, 6, 7)
  • 带星号的形参只能有一个
  • 带星号的参数,可以和其他参数配合使用
  • 所有的参数都保存到args的元组中
  • 可变参数不是必须写在最后,但是注意,带*的参数后的所有参数,必须以关键字参数的形式传递
  • *形参只能接收位置参数,而不能接收关键字参数

6.4 关键字参数

  • 参数的个数会变化,可以传0,1,2,3,…n:可以传递key和value
  • kwargs存储在字典中
def max(**kwargs):
    return kwargs
resault=max(a=1,b=2,c=5)
print(resault)
输出:
{
    
    'a': 1, 'b': 2, 'c': 5}

  • **形参可以接收其他的关键字参数,它会将这些参数统一保存到一个字典中
  • 字典的key就是参数的名字,字典的value就是参数的值
  • **形参只能有一个,并且必须写在所有参数的最后

7、匿名函数

匿名函数指一类无须定义标识符的函数或子程序。Python用lambda语法定义匿名函数

  • 利用匿名函数求两个数的和
result=lambda a,b:a if a>=b else b
print(result(2,3))

练习题1

在这里插入图片描述

num=[0,7,0,2]
num.sort(key=lambda num: 0 if num==0 else 1,reverse=True)
print(num)
输出:
[7, 2, 0, 0]

练习题2

偶数排前,奇数排后

num1=[3,7,0,2]
num1.sort(key=lambda num: 1 if num%2==1 else 0)
print(num1)

8、递归函数

  • 递归的规律
  • 退出递归的条件

练习题1:求10的阶乘

  • 分析:
    • 递归的规律:10!=109!,9!=98! …1!=1
    • 退出递归的条件:1!=1
def factorial(n):
    if n==1:
        return 1 ## n=1时退出递归,返回值为1
    else:
        return n*factorial(n-1)
print(factorial(10))

练习题2:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……

  • 递归的规律:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)
  • 退出递归的条件:F(0)=0,F(1)=1
def fib(n):
    if n==0:
        return 0
    elif n==1:
        return 1
    else:
        return fib(n-1)+fib(n-2)
print(fib(5))

本篇文章到这里结束

猜你喜欢

转载自blog.csdn.net/weixin_41191813/article/details/113726582