当前位置: 首页 > news >正文

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。模块之间代码共享,可以相互调用,实现代码重用,并且模块中函数名称必须唯一。

模块定义

下面代码演示模块的定义,保存的文件名是 myModule.py
def add(a,b):
print (a+b)
def mul(a,b):
print (a*b)
在模块 myModule 中,定义了 2 个函数,一个加法函数和一个乘法函数。它们处理的问题
是同类的,作为一个模块定义。

模块导入

使用模块中的函数时,要先导入模块才能使用,导入有 2 种方式。在一行导入一个模块,
语法如下。
语法:
import 模块名
还可以在一行导入多个模块,语法如下。
语法:
import 模块名 1[,模块名 2][,模块名 3]…
模块和变量一样也有作用域的区别。如果在模块的顶层导入,则作用域是全局的。如果在 函数中导入,则作用域是局部的,其作用域只是所在的函数中。一个模块只能被加载一 次, 无论它被导入多少次,可以阻止多重导入时代码被多次执行。在实际编码时,推荐直接在顶层 导入。
导入标准库模块 sys 。示例代码如下:
>>> import sys
>>> print (sys.platform)
linux
Python 的标准库模块 sys 包含了 Python 环境相关的函数, sys.platform 返回当前平 台的系统名称。
导入并调用自定义模块 myModule 示例代码如下:
>>> import myModule
>>> myModule.add(2,3)
>>> myModule.mul(2,3)
5
6
模块名就是定义的文件名。在调用模块中函数的语句格式是 模块名 . 函数名 。每个模块都有 name 属 性,表示模块的名称。
法:
from 模块名 import 属性名
行导入模块的多个属性语法如下。
语法:
from 模块名 import 属性名 1[,属性名 2] [,属性名 3]…
示例
导入模块属性代码如下所示:
>>> from myModule import add,mul
>>> add(2,3)
>>> mul(2,3)
5
6
语法:
import 模块名 as 模块新名称
from 模块名 import 属性名 as 属性新名称
>>> from myModule import add as add1,mul as mul1
>>> add1(2,3)
>>> mul1(2,3)
#结果
5
6

当程序中的模块非常多时,可以把模块再进行划分,组织成包。包实际上就是一个目录,但必须包含 一个“ init .py” 文件。

包的使用

导入包中的模块只需要在模块名前加上包的名称即可,如按以下方式组织的目录:
project/  #目录
project.py
subproject/ #子目录
__init__.py  #注意: init 前后都是两个下划线
submodel.py
project.py 中调用包 subproject submodel.py 模块示例代码如下:
subproject 目录下创建模块 submodel.py
#submodel.py
def add(a,b):
return a+b
project 目录下创建程序文件 project.py
#project.py
import subproject.submodel
print (subproject.submodel.add(1,3))
[root@localhost project]# python3
project.py 4

_init_.py

前面使用的是空 __init__.py 文件,也可以在里添加代码,它的作用实际上是初始化包中的公共变
量。在第一次使用 import 导入 subproject 包中的任何部分后,会执行包中的 init .py 文件代码。

 subproject 目录中的__init__.py,加入如下代码:

name = '__init__.py'
print ('subproject->',name)
[root@localhost project]# python3 project.py
subproject->__init__.py
4

常用模块

keyword模块

使用 keyword 模块可以查看 Python 语言的关键字,它的属性 kwlist 包含了所有 Python 关键 字的列表。方法 iskeyword( 字符串 ) 用于判断参数是否是 Python 的关键字。如果参数是 Python 的关 键字,则返回 True ;否则,返回 False
示例 :判断 Python 的关键字示例代码:
>>> 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 000000 为 起点,以秒计算的偏移量,是唯一的值。

使用 “time.time() ” 获得的是以秒为单位的偏移量,在 for 循环开始处获得时间戳,循环结束时再
获得时间戳,相减后就是循环执行的时间。
以元组的形式获取时间,示例代码:
>>> 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

相关文章:

  • HCIP-H12-821 核心知识梳理 (6)
  • 《浔川AI翻译v6.1.0问题已修复公告》
  • redis client.ttl(key)
  • 04-Java入门-Path环境变量的配置
  • lerna 8.x 详细教程
  • 【AI News | 20250423】每日AI进展
  • LLama Factory从入门到放弃
  • 非关系型数据库 八股文 Redis相关 缓存雪崩 击穿 穿透
  • java Nacos
  • 数据结构手撕--【栈和队列】
  • 初识分布式事务原理
  • 【敏矽微ME32G030系列】介绍、环境搭建、工程测试
  • 《重塑AI应用架构》系列: Serverless与MCP融合创新,构建AI应用全新智能中枢
  • LangChain4j(13)——RAG使用3
  • vscode+cmake高阶使用
  • SimVG论文精读
  • php基础
  • Nacos自动刷新配置源码解析
  • Ubuntu22.04新版本谷歌无法使用搜狗输入法/中文不显示
  • 组织级项目管理OPM
  • 北京市交通委通报顺平路潮白河大桥事故直接原因
  • 五一节,和人民照相馆一起找回“拍照”的仪式感
  • 尹锡悦涉嫌发动内乱案第二次庭审举行
  • “6+2”小复式追加票!松江购彩者擒大乐透1672万头奖
  • 谁在贩卖个人信息?教培机构信息失守,电商平台“订单解密”
  • 3月赴美外国游客数量加速下滑