1. 切片
翻转字符串顺序,使用切片str[::-1]
a = "Hello World!"
print(a[::-1])
"""
!dlroW olleH
"""
切片完整的写法 str[start: end: step]
- start 字符串开始的索引值
- end 字符串结束的索引值
- step 间隔步长,默认为1。
一般切片时,只使用start和end, 不设置step。如果step为-1,即翻转顺序倒着切片。
2. not运算符
a = []
print(not a)
"""
True
"""
not是Python的内置关键词,一种 逻辑非
的运算符。在上面的代码中, 空列表[]
是一种类似False的效果, 而 not []
即为真。类似的还有空字符串、空集合等空数据。
3. F-strings
first_name = "John"
age = 19
print(f"Hi, I'm {first_name} and I'm {age} years old!")
"""
Hi, I'm John and I'm 19 years old!
"""
自3.6以来,Python新增了字符串的格式化方法,在字符串内可以调用环境中的变量。
实现上面代码的功能,还可以用字符串的format方法
first_name = "John"
age = 19
print("Hi, I'm {} and I'm {} years old!".format(first_name, age))
"""
Hi, I'm John and I'm 19 years old!
"""
3.8以后,Python的f-string新增了如下效果
x = 10
y = 20
print(f"{x = }, {y = }")
"""
x = 10, y = 20
"""
4. print函数
4.1 end参数
a = ["english", "french", "spanish", "german", "twi"]
for language in a:
print(language, end=" ")
"""
english french spanish german twi
"""
print函数end用于设定打印内容结尾的符号,默认换行符\n
,所以在for循环使用print时候会看到内容是逐行显示的。
72. sep参数
print函数默认sep=" “,通过改变sep,打印的结果也会发生变化。
day = "04"
month = "10"
year = "2022"
print(day, month, year)
print(day, month, year, sep = " ")
print(day, month, year, sep = "")
print(day, month, year, sep = ".")
"""
04 10 2022
04 10 2022
04/10/2022
04.10.2022
"""
5. 合并字典
a = {"a": 1, "b": 2}
b = {"c": 3, "d": 4}
a_and_b = a | b
print(a_and_b)
"""
{"a": 1, "b": 2, "c": 3, "d": 4}
"""
3.9之后, python支持字典的 或|
来合并多个字典。
6. 条件语句
condition = True
if condition:
name = "John"
else:
name = "Doe"
print(name)
"""
John
"""
如果条件语句需要写在一行内,可以改写成
condition = True
name = "John" if condition else "Doe"
print(name)
"""
John
"""
7. 下划线_
下划线有以下三个常见的用处
- 调用最近(上一次)的运行结果
- 忽略不需要操作的值
- 定义变量名,避免与内置关键词冲突
- 下划线间隔的数字
7.1 调用结果
>>> print(_)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
>>> 1 + 2
3
>>> print(_)
3
_
可以调用最近上一次 操作1+1
的运行 结果3
。
7.2 忽略不需要的值
除此之外, 下划线 _
还可用在for循环中,忽略不需要的值。
for _ in range(100):
print("The index doesn't matter")
"""
The index doesn't matter
The index doesn't matter
...
"""
7.3 定义变量名,避免与内置关键词冲突
#避免与关键词list、global冲突
list_ = [0, 1, 2, 3, 4]
global_ = "Hi there"
7.4 下划线数字
为了增加数字的可阅读性,可以在数字中加入下划线_
number = 1_500_000
print(type(number))
print(number)
"""
1500000
<class 'int'>
"""
8. setdefault
使用字典做词频统计时,常见实现算法
- 检查该关键词是否存在于字典中
- 如果存在, 该关键词词频加1
- 如果不存在,该关键词词频设为1
import pprint
text = """It's the first of April. It's still cold in the UK.
But I'm going to the museum so it should be a wonderful day"""
counts = {}
for word in text.split():
if word in counts:
counts[word] += 1
else:
counts[word] = 1
pprint.pprint(counts)
"""
{'April.': 1,
'But': 1,
"I'm": 1,
"It's": 2,
'UK.': 1,
'a': 1,
'be': 1,
'cold': 1,
'day': 1,
'first': 1,
'going': 1,
'in': 1,
'it': 1,
'museum': 1,
'of': 1,
'should': 1,
'so': 1,
'still': 1,
'the': 3,
'to': 1,
'wonderful': 1}
"“”
实际上,使用字典的setdefault方法,可以起到ifelse判断的作用。
counts = {}
for word in text.split():
counts.setdefault(word, 0)
counts[word] += 1
9. lambda函数
lambda函数更简洁,可以在一行代码内定义一个简洁的函数。
def square(num:int) -> int:
return num ** 2
print(f"Function call: {square(4)}")
"""
Function call: 16
"""
square_lambda = lambda x: x**2
print(f"Lambda function: {square_lambda(4)}")
"""
Lambda functional: 16
"""
10. Try-Except
写代码的时候,经常会遇到报错,例如分母为0
def get_ration(x:int, y:int) -> int:
ratio = x/y
ratio = x/y
return ratio
print(get_ratio(x=400, y=0))
"""
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-7-688c8b54e5ec> in <module>
4 return ratio
5
----> 6 print(get_ratio(x=400, y=0))
NameError: name 'get_ratio' is not defined
"""
可以使用try except包裹住 "小错误"
,并对可能出错的地方进行微调,来忽略错误。
def get_ration(x:int, y:int) -> int:
try:
ratio = x/y
except: ZeroDivisionError:
y = y + 1
ratio = x/y
return ratio
print(get_ratio(x=400, y=0))
"""
400.0
"""
11. Args&Kwargs
def some_function(*args, **kwargs):
print(f"Args: {args}")
print(f"Kwargs: {kwargs}")
some_function(1, 2, 3, a=4, b=5, c=6)
"""
Args: (1, 2, 3)
Kwargs: {'a': 4, 'b': 5, 'c': 6}
"""
使用*arg
可以让函数传入任意多个参数,而**kwarg
可以让函数传入任意多个键值对
。
12. 列表推导式
even_numbers = []
for x in range(10):
#%取余数
if x%2==0 and x!=0:
even_numbers.append(x)
print(even_numbers)
"""
[2, 4, 6, 8]
"""
实现同样功能,列表推导式只需要一行
even_numbers = [x for x in range(10) if x % 2 == 0 and x != 0]
print(even_numbers)
"""
[2, 4, 6, 8]
"""