💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
推荐: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(),不需要用变量接收。
使用函数时经常会范围一些错误,总结如下:
函数的定义要先于函数的调用,否则会出错。
函数体的代码是一个整体,要注意缩进。
定义函数时要使用冒号,但调用时不可以使用冒号。
前面讲到函数是一段重复使用的代码,它也可以使程序的设计条理更加清晰、结构简单
易懂。下面对上一章使用菜单进行注册和登录的示例进行修改,首先是把 N、E 的功能编写
为函数,代码如下。
示例 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--')
字符 N、E 对应的功能分别使用函数 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 的值是 6,y 的值是 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 传给了函数,此时 addAge(age)的局部变量 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 只能是表达式,不能包含 if、for 等条件循环语句。对于
不需要复用、简单的匿名函数,使用 lambda 能起到很好的效果。
3.4 内建函数
Python 除了本身的语法结构,还提供了常用的内建函数。内建函数是程序员经常使用到的方法,可以提高程序的编写效率。如 float()就是内建的函数。内建函数是自动加载的,
Python 的解释器可以识别。它不需要导入模块,不必做任何的操作,不需要引用就可以调
用 。下面开始介绍常用的内建函数。
1. abs()函数
abs()函数能够返回一个数字的绝对值,即正数。语法格式如下。
语法:
abs(x)
参数 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()函数可以对列表中元素求和,语法结构如下。
语法:
sum(x[ ,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()函数可以返回列表、元组或字符串中最大的元素,语法结构如下。
语法:
max(x)
如果元素是英文字母,那么字母是“大于”数字的,而小写字母“大于”大写字母,示例 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()函数返回列表、元组、或字符串中最小的元素,语法结构如下。
语法:
min(x)
与 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 的简写,可以计算表达式的值。语法格式如下。
语法:
eval(expression [,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()函数返回一个对象的长度,语法格式如下。
语法:
len(s)
参数 s 是一个序列或字符串。示例 20 代码如下:
>>> len('duang')
#字符串
5
>>> language = ['python','java','c#','vb']
#列表
>>> len(language)
4
>>> person = {'张三':'100',"李四":'99',"王五":'88'}
#字典
>>> len(person)
3
对于字符串,len()是返回字符串的字符个数,元组、列表和字典返回的是元素的个数。