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. 下划线_

下划线有以下三个常见的用处

  1. 调用最近(上一次)的运行结果
  2. 忽略不需要操作的值
  3. 定义变量名,避免与内置关键词冲突
  4. 下划线间隔的数字

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. 检查该关键词是否存在于字典中
  2. 如果存在, 该关键词词频加1
  3. 如果不存在,该关键词词频设为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]
"""

广而告之