好,废话不多说,进入正题!!!
1,sort和sorted
a=[3,5,7,1,2]
b=[3,5,7,1,2]
c=a.sort()#list 的 sort 方法返回的是对已经存在的列表进行操作,所以c=None
print(a)
print(c)
d=sorted(b)#返回的是一个新的 list
print(b)
print(d)
结果:
[1, 2, 3, 5, 7]
None
[3, 5, 7, 1, 2]
[1, 2, 3, 5, 7]
解释:
sorted 函数对字符串,列表,元组,字典等对象进行排序操作。sort 是应用在list上的方法,sorted 可以对更多的数据类型进行排序操作。即便都是对列表操作,list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 返回的是一个新的 list,而不是在原来的基础上进行的操作。
2,局部变量与全局变量
首先,先明确一点,那就是在被调用函数内赋值的变元和变量,处于该函数的“局部作用域”。在所有函数之外赋值的变量,属于“全局作用域”。相应的,处于局部作用域的变量被称为“局部变量”,而处于全局作用域的变量称为“全局变量”。变量就分为两种,所以一个变量要么是局部变量,要么是全局变量。
2.1局部变量不能在全局作用域中使用
def spam():
number=123#局部变量
spam()
print(number)
结果:
NameError: name 'number' is not defined
2.2局部作用域不能使用其它局部作用域内的变量
def spam():
number=123
getN()
print(number)
def getN():
Data=1234
number=222
spam()
结果:
123
解释:我们在调用spam()函数时,创建了一个局部作用域,局部变量number被赋值为123,然后,getN()函数被调用,也创建了一个局部作用域,这两个作用域同时存在,而在这个作用域中,Data被赋值为1234,number被赋值为222(注意:此作用域内的number不同于前一个)。重点:当getN()函数返回时,这次调用的局部作用域被销毁,getN()函数内的变量也就不复存在。而spam()的局部作用域仍然存在,程序继续执行,打印number的值为123。关键就是要知道,一个函数中的局部变量与其它函数中的局部变量是无关的。
2.3全局变量可以在局部作用域中使用
def spam():
print(number)
number=1234#全局变量
spam()
结果:
1234
2.4名称相同的全局变量和局部变量
事实上,python中全局变量和局部变量同名是完全合法的,但就是不太容易区分。建议看一下代码时,先不要看结果,心中有答案后再看。
def spam():
A="spam local"
print(A)#"spam local"
def cpam():
A="cpam local"
print(A)#"cpam local"
spam()
print(A)#"cpam local"
A="global"
cpam()
print(A)#"global"
结果:
cpam local
spam local
cpam local
global
解释:参考2.2,2.3,关键在于局部与全局。虽然,程序仍然完全正确,但是区分度不高,易混,所以在实际编程中应尽量避免这种现象。
2.5global语句
def spam():
global A#定义全局变量,而已经有全局变量A了,所以可以认为两者为一个。
A="spam"
A="global"
spam()
print(A)
结果:
spam
当然,也许看完上面仍然有许多不理解的,那么下面请认真看这四条规律。
1,如果变量在全局作用域中使用(所有函数之外),它就总是全局变量。
2,如果在一个函数中,有针对该变量的global语句,它就是全局变量。
3,否则(接2),如果该变量用于函数中的赋值语句,它就是局部变量。
4,但是,如果该变量没有用在赋值语句中,它就是全局变量。
def spam():
global egg
egg="spam" #全局变量 符合2
def bacon():
egg="bacon" #局部变量 符合3
def ham():
print(egg) #全局变量 符合4
egg=123 #全局变量,符合1
spam()
print(egg)
结果:
spam
3,chr与ord
>>> ord('2')
50
>>> chr(50)
'2'
>>>
解释:
chr(x)与ord(x)函数用于在单字符和Unicode编码值之间进行转换。chr(x)函数返回Unicode编码对应的字符,而ord(x)函数返回单字符x对应的Unicode编码。
4,try except else finally
x,y=map(int,input().split())#输入两个整数
try:
result=x/y
except ZeroDivisionError:
print("0不能作为除数!")
else:
print("result is",result)
finally:
print("program end!")
运行(输入数据):
1 0
结果:
0不能作为除数!
program end!
运行:
2 4
结果:
result is 0.5
program end!
python常见的标准异常!:
解释:如果try与except的语句块发生错误,则转到”except异常类型”语句中找到对应的异常类型,如果找到,则执行。如果try与except的语句块正常执行,则转到else语句块。无论程序是否正确,finally语句定会执行。
注意:以下代码有错误!Error!
def spam():
print(egg)
egg="green"
egg=123
spam()
具体错误在哪,下次再聊!