python程序基础知识(三)python函数与模块

1.概述

  本节主要讲一下Python中的函数与模块,python之所以闻名于此,一个点便在于此它有大量并且丰富第三方库,
库说到底其实也是一个人为编写的函数所构成的文件包。

2.python函数定义

	函数是程序中的一个重要部分, Python系统中已经定义了一些系统函数,但是我们也可以通过函数的用法来自定义属于自己的函数。

函数定义
	def 函数名称(参数1,参数2,......):
    	函数体
    
函数名称是用户自己定义的,函数中的参数可以有多个,他们每一个都有自己的名称,函数体是函数的具体代码。
函数可以拥有返回值也可以没有返回值,在函数中用return返回值

如下:

def output():
    print('hello world')

output()

其结果是:

hello world

寻找最大值案例如下:

# 寻找最大值
def max(a,b):
    c = a
    if c < b:
        c = b
    return c
print(max(5,7))
print(max(6,3))

其结果是:

7
6

3.函数的默认参数

在Python程序中,我们写函数时可以事先规定参数的默认值,如果实际调用时没有传入参数的值,就使用默认值。
如果实际调用时没有提供这个参数的实际值,就使用默认的参数值。
函数的参数在调用时,参数可以按名称指定,不得出现重复值,不过在调用时键值参数一定要在位置参数的后面。
同时在定义函数时,默认参数必须在函数中一般位置参数后面。

默认参数的案例:

def fun(a,b=2,c=5):
    print(a,b,c)
    
fun(0,1,2)
fun(0)
fun(0,3)
print('----------')
fun(0,c=4,b=7)
# fun(c=4,b=7)      # 这个是错误的
# fun(b=4,o)         # 这个是错误的
# fun(a=0,2,c=4)        # 这个是错误的

print('----------')
# 以下函数定义是错的
# def fun(a=2,b,c=9):
#     print(a,b,c)

其结果是:

0 1 2
0 2 5
0 3 5
----------
0 7 4
----------

4.函数的变量类型

我们可以看到在主程序中包括了函数,主程序中有自己的变量,函数也有自己的变量,那么变量与变量之间的关系又是什么呢?
在Python中将变量分为全局变量与局部变量:
    局部变量:在函数内部使用,其影响及作用域仅限于函数内,在函数外使用局部变量是非法的。
    全局变量:全局变量的作用域是整个程序,是相对于函数的外部定义。
但局部变量也可以通过'global 变量'内部声明将其变为全局变量,这样子函数内部的变量的变化也会影响到整个程序的全局变量。
有时灵活利用全局与局部变量,可以让我们编写程序变得更加方便。

全局变量与局部变量的案例:

def fun1():
    global counter
    for i in range(3,8):
        counter +=i
    print(counter)
        
def fun2():
    global counter
    for i in range(9,15):
        counter +=i
    print(counter)
    
def fun3(counter):
    for i in range(9,15):
        counter +=i
    print(counter)

def fun4(counter):
    for i in range(9,15):
        counter +=i
    print(counter)
    
    
# 全局变量
# 内部变量的变化也会影响到外部变量的变化
counter = 0
fun1()
print(counter)
fun2()
print(counter)
print('----------')
# 局部变量
# 函数内部变量的变化对外部的变量并无实际影响
counter = 0
fun3(counter)
print(counter)
fun4(counter)
print(counter)

其结果是:

25
25
94
94
----------
69
0
69
0

5.函数的调用

在Python中,函数在定义上是平行的,函数之间允许相互调用,我们要做的就是把握主函数与被调用函数的关系,掌握参数传递的规则。
函数的调用有一种特殊形式,就是嵌套调用,是一个函数调用另一个函数,被调用函数又进一步调用另外一个函数,形成一层层地嵌套关系,
一个复杂的程序存在多层的函数调用。

函数的嵌套调用:

def fun(x):
    x = x*x
    print(x)
    return x

def sum(i):
    s = 0
    for j in range(i+1):
        s = s + j
    print(s)
    return s

def fun2(n):
    y = sum(fun(n))
    print(y)

    
# 将传入的值扩大两倍,然后计算从0-n的累计和
fun2(4)

其结果是:

16
136
136

6.函数的异常

在程序设计中,我们应该考虑各个方面的因素,设计好程序的异常处理,使程序自行处理异常,让程序的运行更加健壮.
 Python程序的异常处理主张:谁捕捉谁报错,报错会在程序中进行传递,如果没有捕捉到最后程序会中断程序进行报错。

捕捉异常情况一:

# 函数的异常扑捉
def fun():
    print('start')
    m = 10/0
    print('end')

try:
    fun()
except Exception as err:
    print(err)

其结果是:

start
division by zero

捕捉异常情况二:

# 函数异常的传递
def fun1():
    print('start1')
    m = 10/0
    print('end1')

def fun2():
    print('start2')
    fun1()
    print('end2')
    
try:
    fun2()
    print('main')
except Exception as err:
    print(err)
print('finish')

其结果是:

start2
start1
division by zero
finish

捕捉异常情况三:

def fun1():
    print('start1')
    m = 10/0
    print('end1')

def fun2():
    print('start2')
    try:
        fun1()
    except Exception as err:
        print(err)
    print('end2')
    
try:
    fun2()
    print('main')
except Exception as err:
    print(err)
print('finish')

其结果是:

start2
start1
division by zero
end2
main
finish

抛出自己想要的异常:

# 主动抛出异常
def fun1():
    print('start1')
    m = 10/0
    print('end1')

def fun2():
    print('start2')
    try:
        fun1()
    except Exception as err:
        raise Exception('10/0 is false')
        print(err)
    print('end2')
    
try:
    fun2()
    print('main')
except Exception as err:
    print(err)
print('finish')

其结果是:

start2
start1
10/0 is false
finish

7.python模块

模块是一个保存了Python代码的文件,模块能定义函数,类和变量。我们可以通过编写属于自己的模块,来加深对于第三方库的理解。
引用的模块要放在与引用程序相同的目录下,或者放在python能找到的目录下.
python模块一般放在安装目录的lib文件夹中。
引用模块的函数时,写模块名称名称与函数名称用'.'连接。model.max

设计一个模块:

# 设计一个程序模块,它包括两个函数:计算最大值和最小值
# 可以将它保存到通常使用的Python文件的同目录下,c:\model
def max(a,b):
    c = a
    if c < b:
        c = b
    return c

def min(a,b):
    c = a
    if c > b:
        c = b
    return c

print(max(1,5))
print(min(1,5))

其结果是:

5 
1
# 可以通过以下两种方式调用相应的函数
import model
print(model.max(1,5),model.min(1,5))

from model import max,min
print(max(1,5),min(1,5))

其结果是:

5 1

查看可以存放模块的目录

# python中能存放模块的目录可以通过sys.path得到,python模块可以放在sys.path包含的任何一个目录中,
import sys
print(sys.path)
for i in sys.path:
    print(i)

其结果是:

['C:\\Users\\lenovo', 'C:\\Users\\lenovo\\anaconda3\\python39.zip', 'C:\\Users\\lenovo\\anaconda3\\DLLs', 'C:\\Users\\lenovo\\anaconda3\\lib', 'C:\\Users\\lenovo\\anaconda3', '', 'C:\\Users\\lenovo\\anaconda3\\lib\\site-packages', 'C:\\Users\\lenovo\\anaconda3\\lib\\site-packages\\locket-0.2.1-py3.9.egg', 'C:\\Users\\lenovo\\anaconda3\\lib\\site-packages\\win32', 'C:\\Users\\lenovo\\anaconda3\\lib\\site-packages\\win32\\lib', 'C:\\Users\\lenovo\\anaconda3\\lib\\site-packages\\Pythonwin', 'C:\\Users\\lenovo\\anaconda3\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\lenovo\\.ipython']
C:\Users\lenovo
C:\Users\lenovo\anaconda3\python39.zip
C:\Users\lenovo\anaconda3\DLLs
C:\Users\lenovo\anaconda3\lib
C:\Users\lenovo\anaconda3

C:\Users\lenovo\anaconda3\lib\site-packages
C:\Users\lenovo\anaconda3\lib\site-packages\locket-0.2.1-py3.9.egg
C:\Users\lenovo\anaconda3\lib\site-packages\win32
C:\Users\lenovo\anaconda3\lib\site-packages\win32\lib
C:\Users\lenovo\anaconda3\lib\site-packages\Pythonwin
C:\Users\lenovo\anaconda3\lib\site-packages\IPython\extensions
C:\Users\lenovo\.ipython
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值