一、变量作用域
- 变量作用域,也就是变量的有效作用范围,也就是该变量可以访问固定的区域,如果超出该区域,在访问时就会报错。在程序中,会根据变量的有效作用范围将变量分为“全局变量”和“局部变量”。
1、全局变量
-
Python允许在所有函数的外部定义变量,这样的变量称为全局变量(Global Variable)。全局变量的默认作用域是整个程序,即全局变量既可以在各个函数外部使用,也可以在各函数的内部使用。
a=5 #在demo函数外部创建变量a,变量a为全局变量 print('函数外部变量a:',a) def demo(): c=a**2 #在demo函数内部可以直接调用变量a进行使用 print('函数内部变量a:',a) return c print(demo()) #函数外部变量a: 5 #函数内部变量a: 5 #25
2、局部变量
-
局部变量是指在函数内部创建并且进行使用的变量,它只在函数内部有效。即函数内部的变量名字只在函数运行时进行创建,并且只能在函数内部进行调用,在函数运行后,所有变量名字都会被释放,不复存在。所以如果在函数外部调用这个变量,便会抛出NameError异常。
def demo(): a=3 #在demo函数内部创建变量a,变量a为局部变量 b=2*a #在demo函数内部调用变量a return b c=2*a #函数外部调用变量a会报错
-
局部变量是函数内部的占位符,与全局变量可能重名但不同
a=5 #函数外部创建全局变量a def demo(): a=3 #函数内部创建局部变量a c=a**2 print('在函数内部打印变量a:',a)#打印局部变量a return c print('在函数外部打印变量a:',a)#打印全局变量a print(demo()) #打印函数返回值 #在函数外部打印变量a:5 #在函数内部打印变量a:3 #9
-
局部变量为组合数据类型且为创建,等同于全局变量
li=[1,2,3] #在函数外部创建全局变量li为列表类型 def demo(a): li.append(a) #函数内部并未创建列表li,直接进行调用 return demo(4) #调用demo函数修改全局变量li的值 print(li) #[1, 2, 3, 4]
3、global关键字
-
在函数体内定义,并使用global关键字修饰后,该变量也就变为全局变量。在函数体外也可以访问到该变量,并且在函数体内还可以对其进行修改。
a=5 def demo(): global a #global关键字定义变量a,a为全局变量 a=a*5 print('输出函数内部变量a:',a) return a print(demo()) print('调用后输出函数外部变量a:',a) #输出函数内部变量a: 25 #25 #调用后输出函数外部变量a: 25
二、匿名函数(lambda)
-
匿名函数是指没有名字的函数,应该在需要一个函数,但是又不想费神去名门这个函数的场合。通常情况下,这样的函数只使用一次。
-
Python中,使用lambda表达式创建匿名函数,语法格式如下:
result=lambda<参数>:<表达式>
resul:用于调用lambda函数的表达式(可以认为是特殊的函数名)
上述语法格式等价于:def <函数名>(<参数>): <函数体> return <返回值>
例:定义一个求圆面积的函数
#①正常定义函数方式 def demo(r): s=3.14*r*r return s #②采用lambda函数定义 s= lambda r:3.14*r*r print(demo(2)) #demo函数传参,求半径为2圆的面积 print(s(2)) #匿名函数传参,求半径为2圆的面积 #12.56 #12.56
使用lambda表达式时,参数可以有多个,使用英文逗号进行分隔,但是表达式只准有一个,也就是只会有一个返回值。而且也不能出现其他非表达式语句(如:for、while等)。
因此lambda函数用于定义简单的、能够在一行内表达的函数。
例:定义匿名函数来求两个数字的和:count = lambda x,y :x+y print(count(2,3)) #5
lambda函数主要用作一些特定函数或方法的参数 lambda函数不能包含命令,包含的表达式不能超过一个 一般情况,建议使用def定义的普通函数
例:对字典所组成的类别进行排序,直接使用sorted会报错:
lis=[{'name':'taobao','age':15}, {'name':'huahua','age':24}, {'name':'goog','age':200}, {'name':'wiki','age':100}] print(sorted(lis)) #TypeError: '<' not supported between instances of 'dict' and 'dict'
这种复杂数据需要指明排序规则,sorted(iterable,key=排序规则)
key:主要是用来进行比较的元素,只有一个参数,具体的函数参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。用匿名函数来设置排序规则比较简洁一些。lis=[{'name':'taobao','age':15}, {'name':'huahua','age':24}, {'name':'goog','age':200}, {'name':'wiki','age':100}] #通过 age 升序排序 print('列表通过 age 升序排序:') print(sorted(lis,key=lambda i:i['age'])) #通过 name 升序排序 print('列表通过 name 升序排序:') print(sorted(lis,key=lambda i:i['name'])) #先按 age 排序,再按 name 排序 print('列表通过 name 升序排序:') print(sorted(lis,key=lambda i:(i['age'],i['name']))) #按 age 降序排序 print('列表通过 age 降序排序:') print(sorted(lis,key=lambda i:i['age'],reverse=True)) #列表通过 age 升序排序: #[{'name': 'taobao', 'age': 15}, {'name': 'huahua', 'age': 24}, {'name': 'wiki', 'age': 100}, {'name': 'goog', 'age': 200}] #列表通过 name 升序排序: #[{'name': 'goog', 'age': 200}, {'name': 'huahua', 'age': 24}, {'name': 'taobao', 'age': 15}, {'name': 'wiki', 'age': 100}] #列表通过 name 升序排序: #[{'name': 'taobao', 'age': 15}, {'name': 'huahua', 'age': 24}, {'name': 'wiki', 'age': 100}, {'name': 'goog', 'age': 200}] #列表通过 age 降序排序: #[{'name': 'goog', 'age': 200}, {'name': 'wiki', 'age': 100}, {'name': 'huahua', 'age': 24}, {'name': 'taobao', 'age': 15}]
三、内置函数
- Python解释器内置了很多函数和类型,任何时候都能使用。
1、数学运算函数
操作函数或方法 | 描述 |
---|---|
ads() | 返回绝对值 |
divmod() | 返回包含除数和余数的元组 |
max() | 返回给定参数的最大值,参数可以为多个数字或序列 |
min() | 返回给定参数的最小值,参数可以为多个数字或序列 |
round() | 浮点型四舍五入 |
sum() | 求和,参数为一个可迭代对象(如一个list) |
pow() | 求幂运算 |
eval() | 用来执行一个字符串表达式,并返回表达式的值 |
2、 类型转换函数
操作函数或方法 | 描述 |
---|---|
bool() | 返回一个布尔类型 |
int() | 将一个字符串或数字转换为整数 |
float() | 将整数或字符串转换成浮点型 |
str() | 将对象转换为字符串类型 |
ord() | 它以一个字符(长度为1的字符串)作为参数,返回对应的ASCII数值,或者Unicode数值 |
chr() | 用一个范围在 range(256)内的(0~255)整数作参数,返回一个对应的字符 |
tuple() | 将其他序列转换为元组类型 |
list() | 将其他类型转换为列表类型 |
dict() | 用于创建一个字典 |
set() | 创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等 |
enumerate() | 用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中 |
range() | 可创建一个等差数列,一般用在for循环中 |
object() | 对象 |
bin() | 返回二进制字符串 |
oct() | 用于将10进制整数转换成8进制,以字符串形式表示 |
hex() | 用于将10进制转换成16进制,以字符串形式表示 |
3、序列操作函数
操作函数或方法 | 描述 |
---|---|
all() | 用于判断给定的可迭代参数 iterable 中所有元素是否不为0、”、False 或者 iterable 为空,如果是返回True,否则返回False |
any() | 用于判断给定的可迭代参数 iterable 是否全部为空对象,如果都为空、0、false,则返回False,如果都不为空、0、false,则返回True |
filter() | 过滤器,用来过滤掉不符合条件的元素,返回符合条件元素构成的新的列表,应该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回True或False,最后将返回True的元素放到新的列表中 |
map() | 根据提供的函数对指定序列做映射,第一个参数function以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的新列表 |
next() | 返回迭代器的下一个项目 |
sorted() | 函数对所有可迭代的对象进行排序操作sort是应用在list上的方法,sorted可以对所有可迭代的对象进行排序操作,list的sort方法返回的是对已经存在的列表进行操作,而内建函数sorted方法返回的是一个新的list,而不是在原来基础上进行操作 |
4、对象操作函数
操作函数或方法 | 描述 |
---|---|
help() | 用于查看函数或模块用途的详细说明 |
dir() | 函数不带参数时,返回当前范围内的变量,方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法dir(),该方法将被调用。如果参数不包含dir(),该方法将最大限度地收集参数信息 |
type() | 打印类型信息 |
ascii | 返回一个字符串,表示对象的可打印形式 |
format() | 格式化输出的函数 |
vars() | 返回对象object的属性和属性值的字典对象 |
5、交互操作函数
操作函数或方法 | 描述 |
---|---|
print() | 打印输出 |
input() | 函数接受一个标准输入数据,在python3中返回str |
6、文件操作函数
操作函数或方法 | 描述 |
---|---|
open() | 文件IO的最基本操作函数,用来打开一个文件,创建一个file对象 |