Python之函数模块

一)Python函数

1. 函数的定义和调用

函数定义格式如下:

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

–【例】打印信息的函数

#定义一个函数,能够完成打印信息的功能
def print_info():
    print('hello python!')
#调用函数
print_info()

在Python函数定义中需要特别注意如下几点:

  • def 是定义函数的关键词,是英文单词define的简写。
  • 函数名称的的命名规则必须符合Python中标识符命名的基本规则,函数名一般由字母、数字和下划线构成。
  • 函数名称后面是英文状态圆括号,可以有很多参数,也可以没有参数,它们都是函数的变量,这些参数称为函数的形式参数(简称形参)。
  • 函数体是函数的程序代码,它的位置相对于def关键字缩进四个空格或者一个制表符。 定义了函数之后,就相当于有了一段具有特定功能的代码,想要让这些代码能够执行,需要调用函数。调用函数的方法很简单,通过“函数名()”即可完成调用。

2.函数参数与返回值

函数设置参数的作用:使函数更加通用,可以根据任意传入的数值的输出相应的结果。
–【例】调用add函数求两数的和

#无参数函数定义
def add():
    c=10+20
    print("两数的和是:",c)
#函数调用
add()

#有参数函数定义
def add(a,b):
    c=a+b
    print("两数的和是:",c)
#函数调用
add(10,20)

函数参数:位置参数、关键字参数、默认参数、可变参数

  1. 位置参数:调用函数时根据函数定义的参数位置来传递参数。
  2. 关键字参数:通过“键-值”形式加以指定,可以让函数更加清晰、容易使用,同时清除了参数的顺序要求。
  3. 可变参数:定义函数时,有时候会不确定调用时会传递多少个参数,此时就是传入的参数个数是可变的,可以是1个、2个到任意,还可以是0个。
  4. 默认参数:用于定义函数,为参数提供默认值,调用函数时可传、可不传默认参数值。注意所有的位置参数必须出现在默认参数前,包括函数定义和调用。
a.默认参数

定义:定义函数时,可以给函数的参数设置默认值,这个参数就被称为默认参数。
–【例】人民币兑换美元的函数和。

#函数定义
def RMB_to_dollar(money,rate=0.1442):
    dollar=money*rate
    print("兑换的美元为:",dollar)
#函数调用
RMB_to_dollar(1000)
b.任意数量的位置可变参数

在定义函数时不确定参数的确切个数,在python中使用*args和**kwargs可以定义可变参数,在可变参数之前可以定义0到任意多个参数。
基本语法格式如下:

def 函数名([formal_args,] *args, **kwargs):
函数体

–【例】含有不定长参数的函数,分别传入不同个数的参数,测试运行结果:

 def test(a,b,*args): 
       print(a) 
       print(b) 
       print(args) 
test(10,20)
c.函数的返回值

定义:指程序中的函数运行完成后返回给调用者的结果。在Python中,函数的返回值使用的是return语句来完成。
格式为:

return 表达式

–【例】定义一个函数来求两个数字的和,并把和值作为函数返回值。

def add(a,b):
    c=a+b
    return c
d.函数的四种类型

根据有没有参数和返回值,函数大致可以分为四种类型:

  • 无参数,无返回值
  • 有参数,无返回值
  • 无参数,有返回值
  • 有参数,有返回值

二)Python变量作用域范围

1.局部变量

局部变量,也称内部变量,是指在一个函数内部定义的变量。局部变量的作用域是定义该变量的函数,局部变量的生存期是从函数被调用的时刻算起到函数返回调用处的时刻结束。当程序执行此函数时才有效,退出函数后局部变量就销毁。不同函数之间的局部变量是不同的,哪怕同名也互不干扰。局部变量具有局部性,使得函数有独立性,函数与外界的接口只有函数参数与它的返回值,使程序的模块化比较突出,这样有利于模块化开发程序。

2.全局变量

全局变量具有全局性,是实现函数之间数据交换的公共途径,全局变量的作用域是整个程序,它在函数开始时就存在,程序结束时才销毁。
–【例】定义函数sum()计算累加和。

result=100                     #全局变量
def sum(m):
    result=0                   #局部变量
    for i in range(m+1):
        result=result+i         
    print("函数内的result值为:",result)
    return result
sum(100)
print("函数外的result值为:",result)

注意:如果一个函数内部要使用到全局变量,那么可以在该函数中声明这个变量为global变量,这样函数内部使用的这个变量就是全局变量。此时,在函数中改变全局变量的值时,会直接影响程序外全局变量的值。

result=100                     #全局变量
def sum(m):
    global result              #声明使用全局变量
    for i in range(m+1):
        result=result+i
    print("函数内的result值为:",result)
    return result
sum(100)
print("函数外的result值为:",result)

三)函数的调用

在Python中,所有函数的定义都是平行的,函数之间允许相互调用,也允许嵌套调用。程序的执行总是从主函数开始,完成对其他函数的调用后再返回到主函数,最后由主程序函数结束整个程序。 嵌套调用就是一个函数调用另外一个函数,被调用的函数又进一步调用另外一个函数,形成层层的嵌套关系。
如下函数的嵌套调用中,函数fn3在函数体内调用了fn2,接着通过fn2调用了fn1,打印出“这是函数fn1”,完成整个调用过程,其具体函数实现如下:

# 函数的嵌套调用:在一个函数内部调用另一个函数
def fn1():
    print("这是函数fn1")
def fn2():
    print("这是函数fn2")
    fn1()  # 函数的嵌套调用
def fn3():
    print("这是函数fn3")
    fn2()  # 函数的嵌套调用
fn3()

–【例】用函数嵌套调用实现求四个数中的最大值。

# 求两个数最大值
def max_two(n1, n2):
    if n1 > n2:
        return n1
    return n2
# 求三个数最大值
def max_three(n1, n2, n3):
    max = max_two(n1, n2)
    return max_two(max, n3)
# 求四个数最大值
def max_four(n1, n2, n3, n4):
    max = max_three(n1, n2, n3)
    return max_two(max, n4)
max= max_four(20, 50, 30, 50)
print(max)

四)python模块

1.模块的基本使用

在python中可以通过import关键字引入某个模块,例如引入math模块,可以使用import math引入。引入后如果在程序编写时候需要调用math模块中的求平方根的函数sqrt(),这必须“模块名.函数名”这样引用,即“math.sqrt()”。
–【例】求4的平方根。

import math
a=math.sqrt(4)
print(a)

引入到python工程文件中的模块可以在引入时取别名,以方便后续程序中的代码编写,例如引入numpy模块取别名为np,调用函数随机产生一个0-100之间的整数。
–【例】随机产生一个0-100之间的整数。

import numpy as np
x=np.random.randint(0,100)
print("产生的随机数为:",x)

2.自定义模块的使用

在python中,每个python文件都可以作为一个模块,模块的名字就是文件的名字。假设现有一个文件myModule.py,它定义了myMin和myMax两个函数,如下列所示:
–【例】实现myMin和myMax两个函数,分别求最小值和最大值。

def myMin(a,b):
        c=a
        if a >b:
                c=b
        return c
def myMax(a,b):
        c=a
        if a<b:
                c=b
        return c

把myModule.py保存到E:\Users\Administrator\PycharmProjects\,此时,如果在相同的路径下新建main.py文件,那么就可以在main.py中引入myModule模块使用其中的myMin和myMax函数。
具体main.py代码如下:

import myModule
min=myModule.myMin(5,8)
max=myModule.myMax(5,8)
print("大数是:",max)
print("小数是:",main)

猜你喜欢

转载自blog.csdn.net/xiaoyu070321/article/details/132153970