开发基础之Python 函数(Basic Python Functions for Development)

news2024/9/22 21:19:16

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

开发基础之 Python 函数
技能目标
- 掌握自定义函数
- 理解变量作用域
- 掌握 lambda 函数
- 掌握 Python 内建函数

3.1 函数

函数是一段可以重复使用的代码,通过传递的参数返回不同的结果,前面章节已经使用
Python 定义的函数如 range()len()input()等,本章讲解用户自定义的函数。
对于重复使用的代码,可以编写为自定义函数以便于重复使用代码,同时提高开发人员

的开发效率。函数可以分为无参函数和带参函数。
3.1.1 无参函数

Python 的自定义无参函数并不复杂,语法格式如下。
语法:
def 函数名称():
代码块
return [表达式]
以关键字 def 开始,后面跟函数名、小括号、冒号,最后使用 return 退出函数。用表达
式可以传递函数的返回值,如果没有返回值,则返回 None
函数是以字母、数字和下划线组成的字符串,但是不能以数字开头。
无参函数的调用语法如下。
语法:
[变量] = 函数名称()
使用赋值运算符“=”可以获得函数的返回值,使用函数时必须先定义再调用,否则程序
会出现错误。

示例 1:使用无参函数实现两数相加并输出二者之和。

示例代码如下:
def add():
#定义函数
op1 = 10
op2 = 20
rt = op1+op2
print (op1,'+',op2,'=',rt)
return
add()
#调用函数
>>>
10 + 20 = 30
#输出结果
首先定义了无参函数 add(),它输出 10+20 的结果值,return 没有返回值,直接使用函
数名 add()进行了调用。
把上面的代码进行修改,用 return 返回结果值,代码如下:
def add():
op1 = 10
op2 = 20
rt = op1+op2
return rt
i = add()
#函数返回值赋值给 i
print ('结果是:',i)
>>>
结果是: 30
#输出结果
函数 add()使用 return 语句可以返回两数相加的结果值,变量 i 接收函数 add()返回的值。
Python 在处理返回值时,如果没有 return 语句,会默认返回 None,程序并不会报错。

示例 2:输出九九乘法表

示例代码如下:
def nineMultiTab():
#函数定义
op1 = (1,2,3,4,5,6,7,8,9)
op2 = (1,2,3,4,5,6,7,8,9)
for i in op1:
for j in op2:
print (i,"*", j,"=",i*j)
return
nineMultiTab()
#函数调用
定义函数 nineMultiTab(),用嵌套的 for 循环输出乘法表,最后返回空值。示例 2 中,
直接通过函数名调用和执行 nineMultiTab(),不需要用变量接收。
使用函数时经常会范围一些错误,总结如下:
函数的定义要先于函数的调用,否则会出错。
函数体的代码是一个整体,要注意缩进。
定义函数时要使用冒号,但调用时不可以使用冒号。
前面讲到函数是一段重复使用的代码,它也可以使程序的设计条理更加清晰、结构简单
易懂。下面对上一章使用菜单进行注册和登录的示例进行修改,首先是把 NE 的功能编写
为函数,代码如下。

示例 3:定义并调用函数,实现用户登录功能。

kgc = {}
def newuser():
#注册新用户函数
prompt1 = 'login desired:'
while True:
name = input(prompt1)
if name in kgc:
prompt1 ='--name taken,try another:'
continue
else:
break
pwd = input('password:')
kgc[name] = pwd
def olduser():
#登录函数
name = input('login:')
pwd = input('password:')
password = kgc.get(name)
if password == pwd:
print ('--welcome back--',name)
else:
print ('--login incorrect--')
字符 NE 对应的功能分别使用函数 newuser()olduser()实现,再就整个程序代码定
义为一个新的函数 showmenu()。在 showmenu()中分别调用这两个函数,代码如下:
def showmenu():
#定义菜单函数
prompt = '''
(N)ew User Login
(E)ntering User Login
(Q)uit
Enter choice:'''
while True:
choice = input(prompt).strip()[0].lower()
print ('\n--You picked : [%s]' % choice)
if choice not in 'neq':
print ('--invalid option,try again--')
else:
if choice=='n':
newuser()
#调用函数 newuser()
elif choice=='e':
olduser()
#调用函数 olduser()
else :
print ('quit')
break
此时,修改后的代码结构清晰易懂,只需要调用菜单函数 showmenu()就可以执行程
序 。整体代码如下:
kgc = {}
def newuser():
#注册
prompt1 = 'login desired:'
while True:
name = input(prompt1)
if name in kgc:
prompt1 ='--name taken,try another:'
continue
else:
break
pwd = input('password:')
kgc[name] = pwd
def olduser():
#登录
name = input('login:')
pwd = input('password:')
password = kgc.get(name)
if password == pwd:
print ('--welcome back--',name)
else:
print ('--login incorrect--')
def showmenu():
#菜单
prompt = '''
(N)ew User Login
(E)ntering User Login
(Q)uit
Enter choice:'''
while True:
choice = input(prompt).strip()[0].lower()
print ('\n--You picked : [%s]' % choice)
if choice not in 'neq':
print ('--invalid option,try again--')
else:
if choice=='n':
newuser()
elif choice=='e':
olduser()
else :
print ('quit')
break
if __name__ == '__main__':
# 程序入口
showmenu()
代码的最后使用“if __name__ == '__main__' :”作为一个判断,决定是否要执行函数
showmenu(),这和直接使用 showmenu()有什么不同呢?当直接执行这段代码时,Python
的内置变量__name__的值是”__main__”。如果是其它函数引用到这段代码,__name__
值就会不同,也就是 showmenu()不会被执行,后面的章节会再介绍它的用法。

3.1.2 带参函数

Python 带参函数的语法格式如下。
语法:
def 函数名称(形式参数列表):
代码块
return [表达式]
通过语法可以看出,带参函数与无参函数的区别是在函数名称后面的小括号中有形式参
数列表,简称形参列表。注意:形式参数列表实际上只是占位符,用于体现参数的个数,每
个参数都没有提供具体的数值。
带参函数的调用语法如下。
语法:
[变量] = 函数名称(实际参数列表)
调用带参函数时,需要为每个参数传递对应的实际数值,又称实参列表。示例 4 是完
成加法运算的函数代码。
示例 4:定义并调用带参函数完成两数相加的运算。
def add(x,y):
#带参函数定义
return x + y
print (add(1,2))
#带参函数调用
>>>
3
#结果
示例 4 中,定义的函数 add()2 个形式参数 x y。在函数的语句块中,形式参数 x
y 的用法与变量很相似的。通过函数名 add()传入实际参数的值 1 2 进行调用执行,执
行后函数的返回值是 3
上面定义的形式参数是普通的参数,又称为位置参数。当调用函数时,根据传递的实
际参数值出现位置与函数定义的形式参数列表进行匹配。
示例 5:使用位置参数方式或关键字参数方式调用带参函数。
示例代码如下:
def aa(x,y):
print (x,y)
aa(10,6)
aa(6,10)
>>>
10 6
#结果
6 10
#结果
在函数 aa(x,y)中,输出 x y 值,x 在前面,y 在后面。调用 aa(10,6)时,x 的值是 10
y 的值是 6。调用 aa(6,10)时,x 的值是 6y 的值是 10。所以,两次调用函数 aa()得到的
输出结果是不同的。
当程序代码比较繁琐时,参数的顺序很难记住,可以使用关键字参数。关键字参数是在
调用函数时,明确指定参数值赋给指定的形参,语法格式如下。
语法:
函数名称(形参 1=实参 1,形参 2=实参 2
示例代码如下:
def aa(x,y):
print (x,y)
aa(x=10,y=6)
aa(y=6,x=10)
>>>
10 6
#结果
10 6
#结果
代码中,aa(x=10,y=6)aa(y=6,x=10)语句在调用函数 aa(x,y)的同时,指定了参数的
名称和对应值(x=10,y=6)(y=6,x=10)。这两个语句明确指定了实参和形参的对应关系,与
参数所在的位置无关,所以输出结果是相同的。
调用带参函数时,传入函数的参数个数必须和声明的参数个数一致。当函数包含有多个
参数时,一旦实参个数与形参个数不符,就可能出错。为了避免这样的错误发生,Python
在函数定义时允许为形式参数指定默认值,从而在调用参数时可以少写参数,省略的参数用
默认值为其赋值。
下面是使用参数默认值的代码示例:
def aa(x,y=6):
print (x,y)
aa(10)
aa(x=10)
aa(10,5)
aa(x=10,y=5)
>>>
10 6
#结果
10 6
#结果
10 5
#结果
10 5
#结果
函数定义时,参数 y 的默认值是 6。函数调用时,可以不传递 y 的值,只传递 x 的值。
直接传值或使用参数名并赋值的方式都可以,aa(10)aa(x=10)的结果是相同的。当传递 y
的值是 5 时,此时 y 的默认值不起作用,所以 aa(10,5)aa(x=10,y=5)输出时 y 的值都是 5
定义参数默认值时,要注意:位置参数必须出现在有默认值参数之前。下面的函数定义
是错误的。
def aa(x=1,y):
print (x,y)
上面的代码中,位置参数 y 出现在有默认值的参数 x=1 的后面,此时,会产生语法错
误。
下面通过示例 6 加深对带参函数的理解。

示例 6:编码实现计算器功能

要求:用户输入两个数字和运算符,程序根据用户指定的运算符执行加、减、乘、除运
算。为了使程序结构清晰,需要编写 2 个函数,一个是用来处理加减乘除运算,一个是用
来处理字符串和数值转换。实现步骤如下:

(1)定义处理运算的函数 operator(op1,op2,opFu),示例代码如下:

def operator(op1,op2,opFu):
1
if opFu not in '+-*/':
return -1
2
if opFu == '+':
result = op1+op2
elif opFu == '-':
result = op1-op2
elif opFu == '*':
result = op1*op2
elif opFu == '/':
3
if op2 == 0:
print ('错误,除数不能为 0/n')
result = None
else:
result = op1 / op2
return result
函数 operator(op1,op2,opFu)中,参数 op1 表示运算符前面的操作数,op2 表示运算
符后面的操作数,opFu 表示运算符。在代码的位置 1 处,判断 opFu 是不是“+-*/”运算符中
的一个。如果不是,返回值是-1,表示程序出错。位置 2 处,判断 opFu 如果是“+”,则进行
加法运算;否则向下依次判断 opFu 是否是-*/这些运算的处理方式与“+”相同。
注意:在位置 3 处,当进行除法运算时,如果除数是 0 时,在数学上是没有意义的。需要
使用 if 语句判断 op2 的值是否等于 0。如果等于 0,需要做特殊的处理,返回的结果是 None
表示程序错误。在函数的最后,通过 return 语句返回运算结果。

(2)用户由键盘输入的是字符串类型,而程序是计算数值的运算,需要将字符串转为

数值型,所以,定义函数 convert(op)给予实现,示例代码如下:

def convert(op):
1
flag = True
2
for ch in op:
if ch not in '1234567890':
flag = False
break
3
if flag == True:
return int(op)
4
else:
return None
位置 1 处定义了一个布尔型变量 flag,用于判断数值的有效性。位置 2 处,对传入的字
符串类型的参数 op,使用 for 循环判断它的每一个字符是否在“1234567890”中。如果有一
个字符不在其中,就说明这个字符串不能转换为数值,flag 的值为 False,退出循环;否则
flag 的值不变,还是 True,说明字符串可以转换为数值型。位置 3 作了相应的判断,把参
op 转换为了整型,使用的是 int()函数。位置 4 表示如果参数 op 不能转为整型,返回的

None

(3)定义了上面的 2 个函数后,开始编写程序的主体代码了。按数学运算的正常顺序

编写程序,由键盘输入第 1 个数值,然后输入运算符,最后再输入第 2 个数值,计算输出

结果。示例代码如下:

if __name__ == '__main__':
1
str1 = '请输入第 1 个数:\n'
strFu = '请输入一个算术运算符:\n'
str2 = '请输入第 2 个数:\n'
2
while True:
print ('需要退出程序,请输入字母 q')
3
opp1 = input(str1)
ch = opp1.strip()[0].lower()
if ch =='q':
break
4
op1 = convert(opp1)
#数值 1
if op1 == None:
print ('输入错误,请输入整数!/n')
continue
5
while True:
opFu= input(strFu)
#运算符
if opFu in '+-*/':
break
else:
print ('运算符输入错误')
continue
6
while True:
op2 = convert(input(str2))
#数值 2
if op2 == None:
print ("输入错误,请输入整数!\n")
continue
else:
break
7
result = operator(op1,op2,opFu)
if result != None:
print ("计算%d %s %d = %d\'n" %(op1,opFu,op2,result))
print ('程序退出了')
位置 1 定义了键盘输入 3 个字符串的提示文字。位置 2 是主体代码的无限循环操作,
可以进行多次计算操作。位置 3 是接受键盘输入,使用 if 语句判断如果输入字符是”q”时,
退出位置 2 的循环,结束程序的运行。位置 4 对输入的第一个字符串进行数据类型转换操
作,如果 convert()返回是 None 说明不能进行数据类型的转换,使用 continue 语句开始下
一次循环,即重新输入数据。位置 5 是循环接受键盘输入的运算符,如果是“+-*/”中的某一
个运算符,则使用 break 语句,结束位置 5 的循环,执行位置 6 的代码;如果不是“+-*/”
的运算符,则执行 continue 语句,重新执行位置 5 的下一次循环,再次接收键盘输入的运
算符。位置 6 是输入第 2 个数值,同样需要做数据类型的转换操作,如果不能转换就需要
重新键盘输入。位置 7 是调用运算函数 operator()执行运算,如果 result 不等于 None,说
明运算是正常的,显示出运行的结果。
最终的示例 6 程序运行结果如下:>>>
需要退出程序,请输入字母 q
请输入第 1 个数:
11
请输入一个算术运算符:
*
请输入第 2 个数:
2
计算 11 * 2 = 22
需要退出程序,请输入字母 q
请输入第 1 个数:
q
程序退出了
输入第 1 个数是 11,运算符为*,第 2 个数是 2,程序的运行结果是输出 22。输入字符
“q”时,程序退出。程序运行中,如果输入错误的数据,程序会提示相应的错误信息,读者
可以自己动手进行尝试。

3.2 变量作用域

作用域是指变量在程序中的应用范围,而变量声明的位置决定它的作用域。Python
作用域区分有局部变量和全局变量。
全局变量是指在一个模块中最高级别的变量有全局作用域,除非被删除,否则存活到程
序运行结束,所有函数都能访问全局变量。
局部变量是指定义在函数内的变量有局部作用域,依赖于定义变量的函数现阶段是否处
于活动状态。调用函数时,局部变量产生,暂时存在。一旦函数执行完,局部变量将会被释
放。
局部变量的作用域仅限于定义它的函数,全局变量的作用域在整个模块内部都是可见
的。在同一个函数中,不允许有同名局部变量。在不同的函数中,可以有同名局部变量。在
同一个程序中,全局变量和局部变量同名时,局部变量具有更高的优先级。
下面通过代码演示局部变量和全局变量的使用情况。
示例 7:使用函数实现年龄的输出。
def addAge(age):
age += 1
#局部变量 age
print ('addAge(): _age=%d age=%d' %(_age,age)) #访问全局变量_age 和局部变量 age
return age
_age = int(input('输入年龄: \n'))
#全局变量_age
rt = addAge(_age)
print ('main(): _age =%d ' %_age)
print ('main(): rt=%d' %rt)
//结果
>>>
输入年龄:
11
addAge(): _age=11 age=12
main(): _age =11
main(): rt=12
在函数 addAge(age)中定义了局部变量 age,在全局范围定义了全局变量_age_age
的值是由键盘输入,程序运行中,可被访问,直至程序结束,所以在 addAge(age)函数的代
码中也可以访问对它。当键盘输入是 11 时,_age 的值是 11,调用”rt=addAge(_age)”,把
全局变量_age 的值 11 传给了函数,此时 addAgeage)的局部变量 age 的值也是 11。执
“age+=1”后,age 值变为 12,而全局变量_age 的值不发生变化,函数的返回值 age 的值
12,函数返回值通过“=”被变量 rt 接收,所以打印“_age=11 rt=12“
Python 中尽量不使用全局变量,因为程序的任意代码都可以自由地访问和修改全局
变量的值,非常容易出现数据被意外修改的错误,而这种错误很难被发现。
局部变量只有在局部中才能使用,其他范围是访问不到的,如 age 是局部变量,在全
局范围就引用不到,比如在程序最后加上代码:
//省略内容
print 'main(): age=%d' %age
//结果>>>
Traceback (most recent call last):
File "D:\pythonTest\7\7-5.py", line 10, in <module>
print 'main(): age=%d' %age
NameError: name 'age' is not defined
从程序执行的结果,可以看到输出信息是“name 'age' is not defined”,说明在全局范围
内访问不到变量 age。这个问题可以使用 global 关键字解决,global 的作用是声明变量为全
局变量,即使变量定义在函数内部,加上 global 后,也可以在全局范围访问。
示例代码如下:
def addAge(num):
global age
age = num+1
print ('addAge(): _age=%d age=%d' %(_age,age))
return age
_age = int(input('输入年龄: \n'))
rt = addAge(_age)
print ('main(): _age =%d ' %_age)
print ('main(): rt=%d' %rt)
print ('main(): age=%d' %age)
//结果
>>>
输入年龄:
11
addAge(): _age=11 age=12
main(): _age =11
main(): rt=12
main(): age=12
对程序做了一些调整,在 addAge()代码中使用关键字 global 定义变量 age。这样,在
程序的任意位置都可以使用使用全局变量 age
注意:在函数中,使用关键字 global 声明的全局变量名不能与其中的局部变量重名。
凡事都有两面性,使用关键字 global 定义的全局变量可以在程序的任意位置被修改数值,
所以要尽量避免在函数中使用 global 定义全局变量,减少程序的不可预知性。

3.3 lambda 函数

lambda 函数的作用是创建匿名函数,是一种声明函数的特殊方式。
lambda 函数的语法。
语法:
lambda params:expr
其中 params 相当于函数接收的参数列表,expr 是函数返回值的表达式。
示例 8:编写一个普通函数和一个 lambda 函数。
示例代码如下:
def sum1(x,y):
#普通函数
return x+y
sum2 = lambda x,y : x+y
#lambda 函数
print (sum1(3,4))
#调用执行普通函数
print (sum2(3,4))
#调用执行 lambda 函数
//结果
>>>
7
7
实现的是相同的功能,但 lambda 函数更加简洁,只需一条语句实现,所以 lambda
称为 lambda 表达式。使用 lambda 只能是表达式,不能包含 iffor 等条件循环语句。对于
不需要复用、简单的匿名函数,使用 lambda 能起到很好的效果。
3.4 内建函数
Python 除了本身的语法结构,还提供了常用的内建函数。内建函数是程序员经常使用到的方法,可以提高程序的编写效率。如 float()就是内建的函数。内建函数是自动加载的,
Python 的解释器可以识别。它不需要导入模块,不必做任何的操作,不需要引用就可以调
用 。下面开始介绍常用的内建函数。
1. abs()函数
abs()函数能够返回一个数字的绝对值,即正数。语法格式如下。
语法:
absx
参数 x 可以是正数,也可以是负数,示例 9 代码如下:
>>> abs(10)
10
>>> abs(-10)
10
>>> bb = -3
>>> abs(bb)
3
参数是 10 -10,返回的是绝对值,结果都是 10.
2. bool()函数
bool()函数返回值是 True False,它是 Boolean(布尔值)的简写,语法格式如下。
语法:
bool( [ x ] )
将参数 x 转换为 Boolean 类型,当参数是数字时,0 返回 False,其他任何值都返回 True
参数是字符串时,None 或空字符串返回 False;否则返回 True。参数是空的列表、元组或
字典返回 False;否则返回 True
示例 10 代码如下:
>>> bool()
#无参时返回 False
False
>>> bool(0)
False
>>> bool(-3)
True
>>> bool(None)
False
>>> bool('')
False
>>> bool('xyz')
True
>>> bool([11,22])
True
3. float()函数
float()函数用于转换数据为 float 类型,语法格式如下。
语法:
float[ x ]
参数 x 可以是字符串或数字,示例 11 代码如下:
>>> float('25')
25.0
>>> float(3)
3.0
>>> float(999.586103)
999.586103
>>> float('999.586103')
999.586103
字符串和数字都可以转为 float 类型。如果不能转换,就会抛出异常。
4. int()
int()函数可以将数据转换为整数,语法结构如下。
语法:
int [ x [base]]
第一个参数 x 是浮点数时,小数后面的数据将会丢失。
第二个参数是进制,默认为十进制。
如果参数是含有浮点数的字符串,将会产生语法错误。示例 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 base 10: '99.9'
注意:当参数是字符串时,字符串中只能是整数格式。如果是浮点格式将有异常产生。
5. range()
range()函数可以生成一个迭代对象,语法结构如下。
语法:
range[start],stop[,step]
第一个参数 start 表示起始值,是可选参数,默认值是 0
第二个参数 stop 表示终止值。
第三个参数表示步长,是可选参数,可以是正数或负数,默认值是 1
从给定的第一个参数开始,到比第二个参数值小 1 的数字结束,常与 for 循环一起使用,
循环执行指定数字的次数。示例 13 代码如下:
>>> range(0,5)
range(0,5)
>>> list(range(0,5))
[0, 1, 2, 3, 4]
>>> range(0,30,3)
range(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
6. sum()函数
sum()函数可以对列表中元素求和,语法结构如下。
语法:
sumx[ start]
第一个参数 x 是迭代器。
第二个参数是步长,是可选参数,默认值是 1
示例 14 代码如下:
>>> num = list(range(0,500,50))
>>> num
[0, 50, 100, 150, 200, 250, 300, 350, 400, 450]
>>> print ((sum(num)))
2250使用 range()生成了一个列表,然后使用 sum()对列表中的数值进行累加求和。
7. max()函数
max()函数可以返回列表、元组或字符串中最大的元素,语法结构如下。
语法:
maxx
如果元素是英文字母,那么字母是大于数字的,而小写字母大于大写字母,示例 15
代码如下:
>>> 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()函数返回列表、元组、或字符串中最小的元素,语法结构如下。
语法:
minx
max()的使用方式相反,它取的是最小值,示例 16 代码如下:
>>> min([6,2,12,7,65])
2
9. dir()函数
dir()函数是 directory 的简写,可以返回关于任何值的相关信息,它可以用于任何对象,
包括字符串、数字、函数、模块、对象和类。当想要快速查找帮助信息时非常有用。语法格
式如下。
语法:
dir( [ object ] )
object 是可选参数,无参时返回当前范围内的变量、方法、和定义的类型列表。带参时
返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含
__dir__(),该方法将最大限度地收集参数信息。示例 17 代码如下:
>>> dir()
#获得当前模块的属性列表
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__',
'_age', 'addAge', 'age', 'bb', 'ch', 'convert', 'i', 'num', 'op1', 'op2', 'opFu', 'operator', 'opp1', 'result',
'rt', 'str1', 'str2', 'strFu', 'string', 'sum1', 'sum2']
>>> dir([])
#查看列表的方法
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__',
'__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__',
'__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__',
'__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy',
'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
10. eval()函数
eval()函数是 evaluate 的简写,可以计算表达式的值。语法格式如下。
语法:
evalexpression [globals [locals]]
第一个参数 expression 只能是简单的表达式。一般情况下,对拆分成多行的表达式不
能运算,常用于把用户输入转换成 Python 表达式。示例 18 代码如下:
>>> eval('100*9')
900
>>> eval(input("请输入表达式:"))
请输入表达式:8+9*2-3
23
eval()函数把字符串“100*9”解析成为了一个表达式,进行相应的计算,获得结果。
11. exec()函数
exec()函数可以运行较复杂的程序,与 eval()函数功能相近。二者的区别是 exec()没有
返回值,eval()有一个返回值。语法格式如下。
语法:
exec( object [ , globals [,locals]])
参数 object 只能是简单的表达式,一般对拆分成多行的表达式不能运算,常用于将用
户输入转换成 Python 表达式。示例 19 代码如下:
>>> exec('print("Hello World")')
#单行语句字符串
Hello World
>>> program = '''print('WoW')
#输出内容的多行字符串
print('duang')'''
>>> exec(program)
WoW
duang
定义单行、多行字符串或输出内容的打印字符串,都可以由 exec()函数执行,它与直接
执行 Python 的语句作用是相同的。
12. len()函数
len()函数返回一个对象的长度,语法格式如下。
语法:
lens
参数 s 是一个序列或字符串。示例 20 代码如下:
>>> len('duang')
#字符串
5
>>> language = ['python','java','c#','vb']
#列表
>>> len(language)
4
>>> person = {'张三':'100',"李四":'99',"王五":'88'}
#字典
>>> len(person)
3
对于字符串,len()是返回字符串的字符个数,元组、列表和字典返回的是元素的个数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2127120.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【天池比赛】【零基础入门金融风控 Task2赛题理解】实战进行中……

2.3 代码示例 2.3.1 导入数据分析及可视化过程需要的库 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import datetime import warnings warnings.filterwarnings(ignore) 2.3.2 读取文件 #读取数据时相对路径载入报错时…

并发编程-JUC原子类、CAS和 Unsafe类

文章目录 零、说在前面一、CAS原理1.1 CAS简介1、线程安全的实现方案2、什么是CAS 1.2 CAS使用案例1.3 CAS存在的问题1、ABA问题2、只能保证一个共享变量之间的原子性操作3、无效CAS会带来开销问题4、总线风暴问题 1.4 CAS在JDK中的应用 二、Unsafe类详解2.1 Unsafe类介绍2.2 U…

使用 Azure 机器学习微调小型语言模型 (SLM) Phi-3

目录 概述 动手实验室 概述 小型语言模型 (SLM) 的动机 效率&#xff1a;SLM 的计算效率更高&#xff0c;需要的内存和存储空间更少&#xff0c;而且由于需要处理的参数更少&#xff0c;因此运行速度更快。成本&#xff1a;培训和部署 SLM 的成本较低&#xff0c;使其可供更广…

【MySQL】从0开始在Centos 7环境安装MySQL

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:MySQL ⚙️操作环境:Xshell (操作系统:CentOS 7.9 64位) 目录 准备步骤 卸载原有环境 安装步骤 获取MySQL官方yum源 安装MySQL yum源 结语 准备步骤 卸载原有环境 第一步登录云服务器(注意安装yum需要在root身份下…

ctf.show靶场ssrf攻略

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 web351 解析:post传入url参数他就会访问。 解法: hackbar传入url参数写入https://127.0.0.1/flag.php web352 解析:post传入url参数&#xff0c;不能是127.0.0.1和localhost 解法:缩写127.1传入 web353 解析…

FTP、SFTP安装,整合Springboot教程

文章目录 前言一、FTP、SFTP是什么&#xff1f;1.FTP2.SFTP 二、安装FTP1.安装vsftp服务2.启动服务并设置开机自启动3.开放防火墙和SELinux4.创建用户和FTP目录4.修改vsftpd.conf文件5.启动FTP服务6.问题 二、安装SFTP总结 前言 在一般项目开发工程中&#xff0c;我们大多数会…

什么是数据治理?在企业数字化转型过程中有什么用?

建设背景 有效的数据治理不仅能够确保数据的安全和质量&#xff0c;还能为企业提供深入的业务洞察&#xff0c;推动决策制定和创新。数据治理是数字化转型的基础&#xff0c;是数据资源成为数据资产的基础&#xff0c;只有经过了数据治理&#xff0c;相应的数据资源才能产生价…

Ubuntu 24.04中安装virtualenv

在Ubuntu 24.04中安装virtualenv&#xff0c;可以按照以下步骤进行&#xff1a; 1. 确保Python已安装‌&#xff1a; 在终端中输入python --version或python3 --version来检查Python的安装情况。 python3 --version2. 安装pip‌&#xff08;如果尚未安装&#xff09;&#x…

【论文笔记】AutoLFADS (Nature Methods, 2022)

相关链接&#xff1a; Is This Tutorial For You? - AutoLFADS TutorialDANDI ArchiveNonhuman Primate Reaching with Multichannel Sensorimotor Cortex Electrophysiology Abstract 通过深度神经群体动力学模型实现最先进的性能需要对每个数据集进行广泛的超参数调整。 Au…

机器学习:opencv--图像金字塔

目录 一、图像金字塔 1.图像金字塔是什么&#xff1f; 2.有哪些常见类型&#xff1f; 3.金字塔的构建过程 4.图像金字塔的作用 二、图像金字塔中的操作 1.向下采样 2.向上采样 3.注意--无法复原 三、代码实现 1.高斯金字塔向下采样 2.高斯金字塔向上采样 3.无法复…

JavaEE:文件内容操作(一)

文章目录 文件内容的读写---数据流字节流和字符流打开和关闭文件文件资源泄漏try with resources 文件内容的读写—数据流 文件内容的操作,读文件和写文件,都是操作系统本身提供了API,在Java中也进行了封装. Java中封装了操作文件的这些类,我们给它们起了个名字,叫做"文…

药品识别与分类系统源码分享

药品识别与分类检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

Vue | Vue深入浅出——Vue中的render函数详解

1.render函数 在编写vue单文件的大多数情况下&#xff0c;我们都是使用template模板来创建HTML。然而在一些条件判断比较复杂的场景下&#xff0c;使用JavaScript去描绘HTML的生成逻辑会显得更加的简洁直观。 使用Vue官网的例子来简单说明&#xff1a; 如果自己在开发的时候…

vscode配置django环境并创建django项目

1、创建文件夹 创建文件夹 并在vscode打开 终端输入命令 “ python -m venv env ” 查看目录结构 2、创建项目 在终端输入 django-admin startproject 文件名(这里以myshop为例) 3、创建应用 在myshop打开终端 在终端输入 django-admin startapp 应用名 这里以app1为例…

6个免费icon图标素材网站

在这个数字化时代&#xff0c;优秀的图标设计对于提升用户体验至关重要。为了帮助设计师和开发者找到高质量的免费icon图标素材&#xff0c;我整理了以下6个实用的网站&#xff0c;让你轻松获取精美图标&#xff0c;助力你的设计工作。快来一起看看吧&#xff01; 1、菜鸟图库 …

如何显示Dialog窗口

文章目录 1. 概念介绍2. 使用方法2.1 Overlay效果2.1 Dialog效果 3. 示例代码4. 内容总结 我们在上一章回中介绍了"使用get显示snackBar"相关的内容&#xff0c;本章回中将介绍使用get显示Dialog.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在…

【卷起来】VUE3.0教程-07-异步请求处理(springboot后端)

&#x1f332; 服务端接口准备 pom文件&#xff0c;引入mybatis/mybatis-plus相关依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>&…

Split函数

Split:可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串。 String[] split(String regex) :将字符串全部拆分. String[] split(String regex, int limit) :将字符串以指定的格式&#xff0c;拆分为limit 组 代码实例&#xff1a; 切割小数点&#xff0c;或\ ,需…

每日单词记背

2024年9月12日 1.discriminate&#xff1a;歧视&#xff0c;区别&#xff0c;分辨 discriminate against 歧视&#xff1b;排斥 discriminate between 区别 辨别 dis(区别)crim(罪犯)inate ->区别为罪犯->歧视 it is illegal to discriminate against women in any way.…

【Linux修行路】信号的产生

目录 ⛳️推荐 一、信号的产生 二、产生信号的系统调用 2.1 kill——给指定的进程发送指定的信号 2.2 模拟实现指令 kill 2.3 raise——给调用的进程发送指定的信号 2.4 abort——给调用者发送 6 号信号 三、验证哪些信号不可以被捕捉 四、为什么除0和解引用空指针会给…