在windows进入命令行或者linux进入终端,敲击进入相应的编译环境的时候,输入
import this
就会出来python的语法要求。
1)变量的交换 (swapping variables)
a=1
b=2
tmp=a
a=b
b=tmp
可以换成
a,b=b,a
2)字符串格式化 (string formatting)
name="Ross"
print("Hi,I'm "+name)
如果字符串过多的话,这样写就会很麻烦
我们可以把程序写成如下:
name="Rose"
country="China"
age=28
print("Hi,I'm %s.I'm from %s. And I'm %d" % (name,country,age))
还可以做的更好:
print("Hi,I'm {}. I'm from {}.And I'm {}.".format(name,country,age))
#format 是字符串对象的一个方法,调用它会返回被格式化过后的新字符串,而花括号中的内容会被最终替换成#format()函数中传入的各个参数
使用这个函数的另一个好处:
如果你有重复的需要被替换的内容:
print("Hi, I'm{0}.Yes,I'm {0}".format(name))
#你可以在花括号中写入被替代参数的索引
如果你使用的是python3.6以上的版本:
print(f"Hi,I'm{name}.I'm from {country}. And I'm {age}.")
#只需要在括号开头写一个f,花括号中的内容就会被自动的替换成指定表达式的值
#注意是表达式 比如{age+1},python将会把表达式运行的结果也就是29替换在字符串中。
#由于这里是任意的表达式,你甚至可以调用一个函数返回一个数值,并替换在字符串中也是没问题的
3)Yield语法 (Yield Statement)
def Fibonacci(n):
a=0
b=1
nums=[]
for _ in range(n):
nums.append(a)
a,b=b,a+b
return nums
可以替换为:
def Fibonacci(n):
a=0
b=1
for _ in range(n):
yield a #使用yield,不需要等待整个列表都生成完毕,而是立即将a送出 ,函数不会马上返回,
# 会继续的执行下去
a,b=b,a+b
return nums
for I in Fibonacci(10): #此处直接接受a的每一次输出 yield 产出
print(i)
#yield的例子:比如从网上下载一些文件,不需要等待文件全部下载完毕,每下载成功一个,就可以接收一个
4)列表解析式(list comprehension)
fruit=["apple","pear","pineapple","orange","banana"]
如果想把水果名字都改成大写:
可以
for i in range(len(fruit)):
fruit[i]=fruit[i].upper()
or
fruit=[x.upper() for x in fruit]
#后面这个方括号实际上实在构建一个新的列表
#列表解析式还有另外一个应用--筛选或者过滤列表中的元素
比如我们希望挑选出列表中以a开头的水果
for f in fruit:
if f.startswith("a"):
filtered_fruit.append(f)
如果此处用列表解析式可以:
filtered_fruit=[x for x in fruit if x.startswitch("a")]
5) Enumerate 函数 (Enumerate Function)
如果我们想得到每个水果在列表中的索引值:
for i,x in enumerate(fruit):
print(i,x)
#这里的enumerate() 函数会在每一次循环的过程中提供两个参数
# 第一个参数i代表索引值,第二个x代表列表中元素的内容
6)反向遍历(looping Backwards)
如果我们希望将fruit中的元素后往前依次输出:
for i,x in enumerate(reversed(fruit)) #enumerate 英 /ɪˈnjuːməreɪt/ 美 /ɪˈnuːməreɪt/vt. 列#举;枚举;计算
print(i,x)
7) 按顺序遍历 (Looping in sorted order)
#我们希望输出的元素是按照水果名字的字典顺序
#也就是让以a开头的排在最前面 ,以 z开头的排在最后面
# 使用python中的内建函数sorted()
for i,x in enumerate(sorted(fruit)):
print(i,x)
8)字典合并操作 (Dictionary Merging)
a={"ross":"123456","xiaoming":"abc123"}
b={"Lilei":"111111","zhangsan":"123456"}
#字典的讲解 https://blog.csdn.net/nyist_yangguang/article/details/106413408
c={}
for k in a:
c[k]=a[k]
for k in b:
c[k]=b[k]
可以改成:
c={**a,**b} #**在python中叫做解包unpacking unpacking
#英 /'ʌn'pækiŋ/ 美 /ʌn'pækɪŋ/ n. 开包;取出货物
#这里的**a 和 **b 相当于将字典a和b中的内容直接填写到了这里
8)三元运算符 (Ternary Operator)
if score>60:
s="pass"
else:
s="fail"
可以被改成:
s="pass" if score>60 else "fail" #等价于 ? :
9) 序列的解包 (Sequence Unpacking)
name="San Zhang"
str_list=name.split()
first_name=str_list[0]
last_name=str_list[1]
可以改成:
first_name,last_name=name.split()
#此处的序列不一定是列表(list),可以是元组(tuple),range。。。
10) With语句 (with statement)
f=open("somefile.txt","r")
s=f.read()
#不关闭的话,此文件一直占用系统资源,直到程序完全退出为止
f.close()
可以写成:
with open("somefile.txt","r")as f:
s=f.read()
#这样写,就不需要手动调用close(),当with语句执行完毕之后,这个文件就会自动被python关闭