普遍的写法是利用一个中间变量tmp进行交换,例:
a = 1;b = 2
tmp = a;a = b;b = tmp
print(a,b)
但是我们可以这样子写
a = 1;b = 2
a, b = b, a
print(a,b)
输出结果: 2,1
name = "JohnserfSeed";country = "China";age = 19
打印字符串我们习惯使用 + 连接,例:
print("Hi, I'm " + name + ". I'm from " + country + ". And I'm " + str(age) + ".")
输出结果: Hi, I'm JohnserfSeed. I'm from China. And I'm 19.
但是我们还可以使用f-string、format等方法实现,例:
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))
print("Hi, I'm {0}. Yes, I'm {0}!".format(name))
#pytv > 3.6
print(f"Hi, I'm {name}. I'm from {country}. And I'm {age}.") #f-string 花括号中可以写表达式,例:{age + 1} 输出20 或调用函数{age()}
输出结果:
Hi, I'm JohnserfSeed. I'm from China. And I'm 19. Hi, I'm JohnserfSeed. I'm from China. And I'm 19. Hi, I'm JohnserfSeed. Yes, I'm JohnserfSeed! Hi, I'm JohnserfSeed. I'm from China. And I'm 19.
创建一个斐波那契数列,并输出。我们习惯用函数封装,用数组存放,例:
def fibonacci(n):
"""
param :n = 斐波那契数列前n个数
return:斐波那契数列
"""
a = 0;b = 1
nums = []
for _ in range(n):
nums.append(a)
a, b = b ,a + b
return nums
for i in fibonacci(10):
print(i)
但是我们可以写的更简洁一些,例:
def fibonacci(n):
"""
param :n = 斐波那契数列前n个数
return:斐波那契数列
"""
a = 0;b = 1
for _ in range(n):
yield a #使用yield生成器,每次生成及时输出
a, b = b ,a + b
for i in fibonacci(10):
print(i)
简单地讲,yield 的作用就是把一个函数变成一个 生成器(generator),执行到 yield a 时,fibonacci 函数就返回一个迭代值,下次迭代时,代码从 yield a 的下一条语句继续执行。
输出结果:
0 1 1 2 3 5 8 13 21 34
创建一个水果列表,例:
fruit = ["apple","pear","pineapple","orange","banana"]
挑选首字母a开头的水果我们可以用循环遍历,例:
filtered_fruit = []
for f in fruit:
if f.startswith("a"):
filtered_fruit.append(f)
print(filtered_fruit)
但是我们可以用列表解析式写成一句话,例:
filtered_fruit = [x for x in fruit if x.startswith("a")]
print(filtered_fruit)
构造了一个新列表,枚举所有fruit元素去判断首字母是否为大写
输出结果: ['apple']
全部元素改成大写呢? 按之前的写法,例:
for i in range(len(fruit)):
fruit[i] = fruit[i].upper()
print(fruit)
当然学会了解析式我们也可以这样做,例:
fruit = [x.upper() for x in fruit]
print(fruit)
输出结果: ['APPLE', 'PEAR', 'PINEAPPLE', 'ORANGE', 'BANANA']
还是那个fruit列表,我们想要输出所有元素必须要用到for循环,但是如果要输出元素下标及元素可没这么容易了,还好pyt提供了一个函数:enumerate(),例:
for i,x in enumerate(fruit):
print(i,x)
输出结果:
0 APPLE 1 PEAR 2 PINEAPPLE 3 ORANGE 4 BANANA
将fruit列表元素从后往前依次输出,我们只需使用reversed(),如果按照a~z的顺序输出呢,pyt还是提供了一个函数:sorted(),例:
#将fruit元素从后往前依次输出
for i,x in enumerate(reversed(fruit)):
print(i,x)
#a~z开头依次输出
for i,x in enumerate(sorted(fruit)):
print(i,x)
输出结果:
0 BANANA 1 ORANGE 2 PINEAPPLE 3 PEAR 4 APPLE
0 APPLE 1 BANANA 2 ORANGE 3 PEAR 4 PINEAPPLE
a = {"rose": "123456", "xiaoming": "abc123"}
b = {"lilei": "111111", "zhangsan": "12345678"}
假设a,b两字典均为账号密码,如果想要合并,我们的思路一开始也是利用c[]的空白字典存入,例:
c = {}
for k in a:
c[k] = a[k]
for k in b:
c[k] = b[k]
print(c)
我们还可以用另一种解包(unpacking)的思维,例:
c = {**a, **b} #**代表解包
print(c)
pyt里的**代表着解包,是不是比写两个循环来的快捷呢
输出结果: {'rose': '123456', 'xiaoming': 'abc123', 'lilei': '111111', 'zhangsan': '12345678'}
很多情况下我们需要判断一个变量并输出不同的字符,我们会使用if...else...的这张格式,例:
if score > 60:
s = "pass"
else:
s = "fail"
print(s)
但是三元运算符可以很好地解决这个问题,例;
s = "pass" if score > 60 else "fail" #条件满足输出 s = "pass" 不满足输出 s ="fail"
print(s)
提取一些字符串中由空格分隔的字符时我们往往会用split()函数,但是字符串一多,代码就会变得冗长,例:
#提取姓和名
name = "Johnserf Seed"
str_list = name.split()
first_name = str_list[0]
last_name = str_list[1]
print(first_name,last_name)
我们这时候要用到解包思维,和上面的字典合并方向一样,例:
first_name, last_name = name.split() #可以是序列,列表,元祖,数组
print(first_name,last_name)
输出结果: Johnserf Seed
pyt脚本很多情况下都需要读取、写入操作,我们都会用open()函数去打开这个对象,例:
#打开文件并读取内容
f = open("somefile.txt", "r")
s = f.read()
f.close() #切记关闭文件否则会一直占用资源
print(s)
这个写法如果应用到一些服务器项目上,随着读取资源的增加势必会造成服务器负担,这时候我们就可以用with open()的方法,例:
with open("somefile.txt", "r") as f:
s = f.read()
print(s)
这样子在我们读取完之后就会自己释放占用的资源,somefile文件就可以被读取并打印了。
输出结果:
..\1.txt ..\2.img ..\3.mp4