python函数与模块
目录
函数
无参函数
带参函数
函数中变量的作用域
lambda函数
内建函数
abs()函数
bool()函数
float()函数
init()
range()
sum()函数
min()函数
模块与包
模块
模块定义
模块导入
包
包的使用
_init_.py
常用模块
keyword模块
random模块
sys模块
time模块
函数
函数是一段可以重复使用的代码,通过传递的参数返回不同的结果,前面章节已经使用了Python定义的函数如range()、len()、input()等。
对于重复使用的代码,可以编写为自定义函数以便于重复使用代码,同时提高开发人员的开发效率。函数可以分为无参函数和带参函数。
无参函数
Python的自定义无参函数并不复杂。
以关键字def开始,后面跟函数名、小括号、冒号,最后使用return退出函数。用表达式可以传递函数的返回值,如果没有返回值,则返回None。
函数是以字母、数字和下划线组成的字符串,但是不能以数字开头。
使用无参函数实现两数相加并输出二者之和。
def add():op1=10op2=20rt=op1+op2print(op1,'+',op2,'=',rt)return
add()
10+20=30
函数add()使用return语句可以返回两数相加的结果值,变量i接收函数add()返回的值。Python在处理返回值时,如果没有 return语句,会默认人返回 None,程序并不会报错。
输出九九乘法表示例代码如下:
def nine():op1 = (1, 2,3,4,5,6, 5, 6, 7, 8, 9)op2 = (1, 2,3,4,5,6, 5, 6, 7, 8, 9)for i in op1:for j in op2:print(i, "*", j, "=", i * j)return
nine()
使用函数时经常会范围一些错误,总结如下:
函数的定义要先于函数的调用,否则会出错。
函数体的代码是一个整体,要注意缩进。
定义函数时要使用冒号,但调用时不可以使用冒号。
带参函数
Python带参函数的语法格式如下。
语法:
函数名称(形式参数列表):
def
代码块
return[表达式]
定义并调用带参函数完成两数相加的运算。
def add(x,y):
return x+y
print(add(1,2))
3
使用位置参数方式或关键字参数方式调用带参函数。
def aa(x, y):
print(x,y)
aa(10,6)
aa(6, 10)
10 6
6 10
当程序代码比较繁琐时,参数的顺序很难记住,可以使用关键字参数。关键字参数是在调用函数时,
明确指定参数值赋给指定的形参.
def aa(x, y):
print(x, y)
aa(x=10, y=6)
aa(y=6, x=10)
10 6
10 6
调用带参函数时,传入函数的参数个数必须和声明的参数个数一致。当函数包含有多个参数时,一旦实参个数与形参个数不符,就可能出错。为了避免这样的错误发生,Python在函数定义时允许为形式参数指定默认值,从而在调用参数时可以少写参数,省略的参数用默认值为其赋值。
def aa(x, y):
print(x, y)
aa(10)#会报错,缺少y
aa(x=10) ##会报错,缺少y
aa(10, 5)
aa(x=10, y=5)
编码实现计算器功能
要求:用户输入两个数字和运算符,程序根据用户指定的运算符执行加、减、乘、除运算。为了使程序结构清晰,需要编写2个函数,一个是用来处理加减乘除运算,一个是用来处理字符串和数值转换。实现步骤如下:
defadd(x,y):
return x + y
def subtract(x,y):
return x - у
def multiply(x, y):
return x
def divide(x, y):
return x / y
print("选择运算:")
print("1、相加")
print("2、相减")
print("3、相乘")
print("4、相除")
choice=int(input("输入你的选择(1/2/3/4):"))
num1=int(input("输入第一个数字:"))
num2=int(input("输入第二个数字:"))
if choice == 1:
print(num1,"+",num2,"=", add(num1,num2))
elif choice == 2:
print(num1,"-",num2,"=", subtract(num1,num2))
elif choice == 3:
print(num1,"*",num2,"=", multiply(num1,num2))
elif choice == 4:
print(num1,"/",num2,"=", divide(num1,num2))
else:
print("非法输入")
函数中变量的作用域
作用域是指变量在程序中的应用范围,而变量声明的位置决定它的作用域。Python按作用域区分有局部变量和全局变量。
全局变量是指在一个模块中最高级别的变量有全局作用域,徐非被删除,否则存活到程序运行结束,所有函数都能访问全局变量。
局部变量是指定义在函数内的变量有局部作用域,依赖于定义变量的函数现阶段是否处于活动状态。调用函数时,局部变量产生,暂时存在。一旦函数执行完,局部变量将会被释放。
局部变量和全局变量的使用规则:
局部变量的作用域仅限于定义它的函数,
全局变量的作用域在整个模块内部都是可见的,
在同一个函数中,不允许有同名局部变量。
在不同的函数中,可以有同名局部变量。
在同一个程序中,全局变量和局部变量同名时,局部变量具有更高的优先级
使用函数实现年龄的输出。
使用函数实现年龄的输出。
name='Tim'
def f1():age=18 print(age,name)
def f2():age=19print(age,name)
f2()
18 Tim
19 Tim
在Python中尽量不使用全局变量,因为程序的任意代码都可以自由地访问和修改全局变量的值,非常容易出现数据被意外修改的错误,而这种错误很难被发现。
global的作用是声明变量为全局变量,即使变量定义在函数内部,加上global后,也可以在全局范围访问。
def f1():global namename='Tim'age=18print(age,name)
def f2():age=19print(age, name)
f1()
f2()
18 tim
19 tim
使用函数实现年龄输出
name = 'Tim'
def f1():
age = 18
print(age,name)
def f2():
age=19
print(age,name)
f1()
f2()
18 Tim
19 Tim
lambda函数
lambda函数的作用是创建匿名函数,是一种声明函数的特殊方式。其中params相当于函数接收的参数列表,expr是函数返回值的表达式。
编写一个普通函数和一个lambda函数。
示例代码如下:
def sum1(x,y):
return x+y
sum2=lambda x,y:x+y
print(sum1(3,4))
print(sum2(3,4))
7
7
实现的是相同的功能,但lambda函数更加简洁,只需一条语句实现,所以1ambda也称为lambda表达式。使用 lambda只能是表达式,不能包含:if、for等条件循环语句。对于不需要复用、简单的匿名函数,使用 lambda能起到很好的的效果。
内建函数
Python除了本身的语法结构,还提供了常用的内建函数。内建函数。内建函数是程序员经常使用到的方法,可以提高程序的编写效率。如float()就是内建的函数。内建函数是自动加载的,Python的解释器可以识别。它不需要导入模块,不必做任何的操作,不需要引用就可以调用。下面开始介绍常用的内建函数。
abs()函数
函数能够返回一个数字的绝对值,即正数。语法格式如下。
abs ()
语法:
abs
参数x可以是正数,也可以是负数,示例9代码如下:
>>>abs(10)
10
>>>abs(-10)
10
>>>bb = -3
>>>abs(bb)
3
bool()函数
bool()函数返回值是True或False,它是Boolean(布尔值)的简写,将参数x转换为Boolean类型,当参数是数字时,0返回PFalse,其他任何值都返回True。
参数是字符串时,None或空字符串返回False;否则返回True。参数是空的列表、元组或字典返回 False;否则返回 True。
示例10代码如下:
>>>bool()
False
bool(0)
False
>>>bool(-3)
True
>>>bool(None)
False
注意,括号中None,首字母要大写
>>>bool('')
False
>>>bool('xyz')
True
>>>bool([11,22])
True
float()函数
float()函数用于转换数据为float 类型,
参数 可以是字符串或数字,
示例11代码如下:
>>> float('25')
25.0
>>> float(3)
3.0
>>> float(999.586103)
999.586103
>>> float('999.586103
999.586103
init()
int()函数可以将数据转换为整数,
示例12代码如下:
>>>int(199.99)
199
>>>int('100')
100
>>>int('99.9')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with basse 10: '99.9'
注意:当参数是字符串时,字符串中只能是整数格式。如果是浮点格式将有异常产生。
range()
range()函数可以生成一个迭代对象,
第一个参数start表示起始值,是可选参数,默认值是0。
第二个参数stop表示终止值。
第三个参数表示步长,是可选参数,可以是正数或负数,默认值是1
从给定的第一个参数开始,到比第二个参数值小1的数字结束,常与for循环一起使用,循环执行指定数字的次数。示例13代码如下:
>>>ange(0,5)
range(0,5)
>>>list(range(0,5))
[0,1,2,3,4]
>>>>>> range(0,30,3)
range(0,30,3)
备注:0表示开始的数字,30表示结束的,3表示步进
>>>list(range(30,0,-3))
[30,27,24,21,18,15,12,9,6,3]
>>> for i in range(0,5):print(i)
0
1
2
3
4
sum()函数
sum()函数可以对列表中元素求和.
>>> num=list(range(1,101))
>>>num
[0, 50, 100, 150, 200, 250, 300, 350, 400, 450]
>>> print(sum(num))
5050
使用range()生成了一个列表,然后使用Sum()对列表中的数值进行累加求和.
min()函数
max()函数可以返回列表、元组或字符串中最大的元素,如果元素是英文字母,那么字母是
"大于"数字的,而小写字母"大于"大写字母,示例:
>>> num = [6,2,12,7,65]
>>> max(num)
65
>>> string = 'd,u,a,n,g,D,U,A,N,G'
>>>max(string)
'u'
>>>max(1000,650,98,2678,9)
2678
(8)min()函数
min()函数返回列表、元组、或字符串中最小的元素,与max()的使用方式相反,它取的是最
小值,示例16代码如下:
>>> min([6,2,12,7,65])
2
模块与包
如果编写的程序中类和函数较多时,就需要对它们进行有效的组织分类,在Python中模块和包都是组织的方式。复杂度较低可以使用模块管理,复杂度高则还要使用包进行管理。
模块
模块是Python中一个重要的概念,实际上就是包含Python函数或者类的程序。模块就是一个包含Python定义和语句的文件,把一组相关的函数或代码组织到一个文件中,一个文件即是一个模块。模块的文件名=模块名+后缀.py。模块之间代码共享,可以相互调用,实现代码重用,并且模块中函数名称必须唯一。
模块定义
def add(a,b):
print (a+b)
def mul(a,b):
print (a*b)
模块导入
>>> import sys
>>> print (sys.platform)
linux
>>> import myModule
>>> myModule.add(2,3)
>>> myModule.mul(2,3)
5
6
>>> from myModule import add,mul
>>> add(2,3)
>>> mul(2,3)
5
6
>>> from myModule import add as add1,mul as mul1
>>> add1(2,3)
>>> mul1(2,3)
#结果
5
6
包
包的使用
#submodel.py
def add(a,b):
return a+b
#project.py
import subproject.submodel
print (subproject.submodel.add(1,3))
[root@localhost project]# python3
project.py 4
_init_.py
在 subproject 目录中的__init__.py,加入如下代码:
name = '__init__.py'
print ('subproject->',name)
[root@localhost project]# python3 project.py
subproject->__init__.py
4
常用模块
keyword模块
>>> import keyword
>>> print(keyword.iskeyword("if"))
True
>>> print(keyword.iskeyword("abcde"))
False
>>> print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def',
'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import',
'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while',
'with', 'yield']
random模块
方法 | 操作 |
random() | 生成一个随机的浮点数,范围在0.0~1.0之间 |
uniform([上限][下限]) | 在设定浮点数的范围内随机生成一个浮点数 |
randint([上限][下限]) | 随机生成一个整数,可以指定这个整数的范围 |
choice(序列) | 从任何序列中选取一个随机的元素返回 |
shuffle(序列) | 随机打乱一个序列中元素的顺序 |
sample(序列,长度) | 从指定的序列中随机截取指定长度的片断,序列本身不做修改 |
使用 random 模块常用方法生成随机整数,并重新排序示例代码:
>>> import random #导入 random 模块
>>> print (random.randint(1,100))
>>> print (random.randint(100,500))
>>> list1 = ['aaa','bbb','ccc']
>>> str1 = random.choice(list1)
>>> print ('随机选取列表中的一个元素:',str1)
>>> print ('重新排序后:\n')
>>> random.shuffle(list1)
>>> print (list1)
>>> 2
310
sys模块
属性/方法 | 操作 |
version | 获取解释器的版本信息 |
path | 获取模块的搜索路径,初始化时使用 PYTHONPATH 环境变量的值 |
platform | 获取操作系统平台名称 |
maxint | 最大的 int 值 |
maxunicode | 最大的 Unicode 值 |
stdin | 读取信息到 Shell 程序中 |
stdout | 向 Shell 程序输出信息 |
exit() | 退出 Shell 程序 |
>>> import sys
>>> print ("Python version:%s" %sys.version)
>>> print ("Python platform:%s" %sys.platform)
>>> print ("Python path:%s" %sys.path)
time模块
属性 / 方法 | 操作 |
time() | 获取当前时间戳 |
localtime() | 获取当前时间的元组形式 |
ctime() | 获取当前时间的字符串形式 |
asctime(t) | 将时间转换成字符串,参数 t 是元组形式的时间 |
sleep(secs) | 按指定的时间推迟运行,参数是推迟的时间,单位是秒 |
Python 中时间有时间戳和元组两种表示形式。时间戳的表现形式是以相对 1970.1.1 00:00:00 为 起点,以秒计算的偏移量,是唯一的值。
>>> import time
>>> print (time.time())
1702474400.840029
>>> print (time.asctime())
Wed Dec 13 21:33:20 2023
>>> print (time.localtime())
time.struct_time(tm_year=2023, tm_mon=12, tm_mday=13, tm_hour=21, tm_min=33, tm_sec=22,
tm_wday=2, tm_yday=347, tm_isdst=0)
>>> t1 = (2015,9,29,10,30,12,12,12,0)
>>> print (time.asctime(t1))
Sat Sep 29 10:30:12 2015
>>> t2 = time.localtime()
>>> year = t2[0]
>>> print (year)
2023