必须知道的 Python 专属骚技巧 25 例
碎碎练
skill25eg.py,后续继续将代码调出来检查" TypeError: 'list' object is not callable "
map, reduce 这类还是需要多看多练
弄懂推导中的语法及熟练教材中的用法、函数、参数
print('-'*10,'必须知道的 Python 专属骚技巧 25 例','-'*10)
#eg1 原地交换
x,y = 10, 20
print(x,y)
x,y = y, x
print('交换值后 x,y = y, x ===>>>',x,y)
#eg2 链状比较操作符
n = 10
result = 1 < n < 20
print('result = 1 < n < 20 ===>>>', result)
result = 1 > n <= 9
print('result = 1 > n <= 9 ===>>>', result)
#eg3 三元操作符进行条件赋值
#x=10 if (y == 9) else 20
#print([x=10 if (y == 9) else 20])
print('在列表推导中 = ', [m**2 if m>10 else m**4 for m in range(50)])
#判断最小值
def small(a,b,c):
return a if a<=b and a<=c else (b if b<=a and b<=c else c)
print('3,4,5中判断最小值 ===>>>', small(3,4,5))
#在类中# x=(classA if y==1 else classB(param1, param2)
#eg4 多行字符串
a = '''dvfssd
fsdfdsfsd
dsdsfbfdfasf
afasfaf'''
print('多行字符串 ===>>>', a)
#eg5 in判断
m = 3
if m in [1,3,5,7]:
print('True')
else:
print('False')
#eg6 四种翻转字符串/列表的方式
## 翻转列表本身
testlistA = [1,3,5]
testlistA.reverse()
print('翻转字符串 ===>>>', testlistA)
# 在一个循环中翻转并迭代输出
for element in reversed([1,3,5]):
print(element)
# 一行代码翻转字符串
'Test Python'[::-1]
print('Test Python'[::-1])
# 使用切片翻转列表
[1,3,5][::-1]
print([1,3,5][::-1])
#eg7 一次性初始化多个变量
#可以直接赋值:
# a,b,c,d = 1,2,3,4
list = [1,2,3]
x,y,z = list
print(x,y,z)
# 8、打印模块路径
import socket
print('模块路径 ===>>>', socket)
# 9、字典推导
# 列表推导 [expression for item in iterable]
lsta = [[0 for i in range(4)] for i in range(4)]
print(lsta)
testDict = {i:i*i for i in range(10)}
print('输出字典 i:i*i ===>>>', testDict)
testSet = {i*2 for i in range(10)} ###Sublime text编辑,此处为什么for上定位高亮
testSeta = set([i*2 for i in range(10)])
testSetb =set(i*2 for i in range(10))
print('输出集合1 i*i ===>>>', testSet)
print('输出集合2 i*i ===>>>', testSeta)
print('输出集合3 i*i ===>>>', testSetb)
# 10、拼接字符串
a = 'I '
b = 'love '
c = 'you '
print(a+b+c)
I = ['a','b','c']
print(''.join(I))
# 11、循环枚举索引
lsta = [10,20,30]
for i,value in enumerate(lsta):
print(i,':',value)
# 12、返回多个值
def a():
return 1,2,3,4,5
print(a())
# 十三、开启文件分享
# python3 -m http.server
# 十四、调试脚本
#import pdb
#pdb.set_trace()
# 十五直接迭代序列元素
I = [0,1,2,3,4,5]
for i in I:
print('直接迭代序列元素 =', I)
for i in range(len(I)):
print('迭代元素的索引 =',I[i])
# 16、巧用else语句(重要)
l1 = [1,2,3,4,5]
for i in l1:
if i == '6':
print(666)
break
else:
print(999)
l2 = [1,2,3,4,5]
a = 1
for i in l2:
print(666)
a = 0
break
if a:
print(999)
# 十七、except的用法和作用
'''
try/except: 捕捉由PYTHON自身或写程序过程中引发的异常并恢复
except: 捕捉所有其他异常
except name: 只捕捉特定的异常
except name, value: 捕捉异常及格外的数据(实例)
except (name1,name2) 捕捉列出来的异常
except (name1,name2),value: 捕捉任何列出的异常,并取得额外数据
else: 如果没有引发异常就运行
finally: 总是会运行此处代码
'''
# 十八、Python自省
'''
type()
dir()
getattr()
hasattr()
isinstance()
'''
# 十九、python容器
# 二十、map()
'''
def f1(a1):
return a1*a1
r1 = list(map(f1,[1,2,3,4,5,6,7,8,9]))
r2 = list(map(f1,[1,2,3]))
print(r1)
print(r2)
'''
''' ### 运行上面的结果为什么会出现下面提示,单独将此部分另外做一个单独的文件可正常运行,并将函数作用于列表中的元素并返回值,继续保留试验几种原因
File "D:\Py_eg\IntroducingPython\skill25eg.py", line 181, in <module>
r1 = list(map(f1,[1,2,3,4,5,6,7,8,9]))
TypeError: 'list' object is not callable
'''
#list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
# del list ### 试着这样做看看效果,不记得在这行之前是否有用过将list当做变量名
# print(list(range(1,6)))
# 二十一、reduce
'''
reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,
这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
'''
from functools import reduce
def fn(x,y):
return x*10+y
print(reduce(fn,[1,3,5,7,9]))
from functools import reduce
a = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
def charnum(s):
return a[s]
def strint(s):
return reduce(lambda x,y:x*10+7,map(charnums))
# 二十二、split
str = '123456'
str_1 = str.split('/')
print(str_1)
# 二十三、理论结合实际
# 1) 下面这个在IDLE shell中执行,可将输入的一行英文按照单词 反转
print(" ".join(input().split(" ")[::-1]))
# 3)我们把最近的知识结合起来做一道题:
result = ""
for i in input()[::-1]:
if i not in result:
result +=i
print(result)
OnionYang@