一、将 Python 3 和 pip 3 设置为默认值

使用 Python 时最常见的问题之一是必须记住使用 Python 3.x 而不是 Python 2.x。幸运的是,将 Python 3 和 pip 3 设置为默认值真的很容易。您首先需要使用以下which命令找出每个安装的位置:

which python3   # /usr/local/bin/python3
which pip3      # /usr/local/bin/pip3

记下每个响应,以便您可以将路径作为别名添加到 shell 环境的配置文件中。然后,您可以使用echo为每个.zshrc.bashrc根据您的环境添加一行:

# Linux or other bash environment
echo "alias python=/usr/local/bin/python3" >> ~/.bashrc
echo "alias pip=/usr/local/bin/pip3" >> ~/.bashrc

# Mac OS or other zsh environment
echo "alias python=/usr/local/bin/python3" >> ~/.zshrc
echo "alias pip=/usr/local/bin/pip3" >> ~/.zshrc

这样就完成了!Python和pip都能映射到它们的 Python 3.x 版本里。

二、在 Python 中交换两个变量的 3 种方法

ʕ•ᴥ•ʔ使用临时变量

交换两个变量值的最简单方法是使用temp变量。该temp变量用来存储拳头变量的值(temp = a),允许你交换两个变量的值(a = b),然后分配的值temp到所述第二变量。

a = 11
b = 7

temp = a
a = b
b = temp

print(a) # 7
print(b) # 11

ʕ•ᴥ•ʔ没有临时变量(元组交换)

另一种不使用临时变量交换两个变量值的方法是使用元组打包和序列解包。元组可以通过多种方式构建,其中之一是使用逗号分隔元组项。此外,Python 在左侧之前评估赋值的右侧。因此,通过在语句的右侧用逗号分隔变量,变量被打包成一个元组,并通过在左侧放置相同数量的逗号分隔的目标变量来解包。

这种变量交换和排列的方法可以用于两个以上的变量,只要语句两侧的变量数量相同即可。

a = 11
b = 7

a, b = b, a

print(a) # 7
print(b) # 11

ʕ•ᴥ•ʔ使用算术运算符(仅适用于数字)

如果两个变量是数字,则可以使用算术运算符交换它们的值,例如加法和减法 ( +, -) 或乘法和除法 ( *, /)。这种交换方法是基于计算两个数字的总和,然后使用总和和与总和的差来交换它们。

a = 11
b = 7

a = a + b # a = 18, b = 7
b = a - b # a = 18, b = 11
a = a - b # a = 7,  b = 11

print(a) # 7
print(b) # 11

三、6 个 Python f 字符串提示和技巧

与传统的字符串格式相比,Python 的 f 字符串提供了一种更易读、更简洁且不易出错的字符串格式。它们充满了有用的功能,在日常使用中肯定会派上用场。让我们来看看其中的一些。

❀字符串插值

迄今为止最常用的 f-string 功能是字符串插值。您需要做的就是将值或变量括在花括号 ( {}) 中,您就可以开始了。

str_val = 'apples'
num_val = 42

print(f'{num_val} {str_val}') # 42 apples

❀变量名

除了获取变量的值之外,您还可以在值旁边获取它的名称。这在调试时特别有用,并且可以通过=在大括号内的变量名称后添加等号 ( )来轻松实现。

请记住,花括号内的空格已被考虑在内,因此在等号周围添加空格可以使结果更具可读性。

str_val = 'apples'
num_val = 42

print(f'{str_val=}, {num_val = }') # str_val='apples', num_val = 42

❀数学运算

在语法上与变量名称不同,您还可以在 f 字符串中执行数学运算。您可以将数学表达式放在花括号内,如果添加等号,您将获得表达式及其结果。

num_val = 42

print(f'{num_val % 2 = }') # num_val % 2 = 0

❀可打印的表示

除了纯字符串插值外,您可能还想获得一个值的可打印表示。这已经很容易使用该repr()功能完成了。f 字符串通过!r在大括号内附加 a来提供更短的语法。

str_val = 'apples'

print(f'{str_val!r}') # 'apples'

❀数字格式

此外,f 字符串也可用于格式化 - 因此名称中的f。要为值添加格式,您可以添加一个冒号 ( :),后跟一个格式说明符。这也可以与之前的 equals 结合使用,您是否也想打印变量的名称。

数字是一个很好的候选者。例如,如果要将数值修剪为小数点后两位,则可以使用.2f格式说明符。

price_val = 6.12658

print(f'{price_val:.2f}') # 6.13

❀日期格式

最后,日期也可以使用格式说明符以与数字相同的方式进行格式化。像往常一样,%Y表示全年,%m是月份,是月份%d中的日期。

from datetime import datetime;

date_val = datetime.utcnow()

print(f'{date_val=:%Y-%m-%d}') # date_val=2021-07-09

四、在 Python 中格式化字符串的 2 种方法

ʕ ᵔᴥᵔ ʔ 字符串

格式化字符串文字,通常称为 f 字符串,是以'f' 或为前缀的字符串'F'。这些字符串可以包含用大括号 ( {})括起来的替换字段。

name = 'John'
age = 32

print(f'{name} is {age} years old') # 'John is 32 years old'

ʕ ᵔᴥᵔ ʔ str.format()

str.format()方法的工作方式与 f-strings 非常相似,主要区别在于替换字段作为参数提供,而不是作为字符串的一部分提供。

name = 'John'
age = 32

print('{0} is {1} years old'.format(name, age)) # 'John is 32 years old'

五、理解 Python 的切片赋值

5.1理解 Python 的切片符号

ʕ•̫͡• ʔ 基本语法

Python 的切片符号用于返回列表或列表的一部分。基本语法如下:

[start_at:stop_before:step]

其中start_at是要返回的第一个项目的索引(包括),stop_before是停止之前的元素的索引(不包括),step是任何两个项目之间的步幅。

所有三个参数都是可选的,这意味着您可以省略其中任何一个。例如:

nums = [1, 2, 3, 4, 5]

nums[1:4]     # [2, 3, 4]   (start at 0, stop before 4)
nums[2:]      # [3, 4, 5]   (start at 0, stop at end of list)
nums[:3]      # [1, 2, 3]   (start at 0, stop before 3)
nums[1:4:2]   # [2, 4]      (start at 1, stop before 4, every 2nd element)
nums[2::2]    # [3, 5]      (start at 2, stop at end of list, every 2nd element)
nums[:3:2]    # [1, 3]      (start at 0, stop before 3, every 2nd element)
nums[::2]     # [1, 3, 5]   (start at 0, stop at end of list, every 2nd element)
nums[::]      # [1, 2, 3, 4, 5] (start at 0, stop at end of list)

从上面的示例中您可能可以看出,默认值为start_at = 0stop_before = len(nums)step = 1

浅克隆列表的惯用方法是使用[:](例如nums_clone = nums[:])。

ʕ•̫͡• ʔ 负值

所有三个参数也接受负值。对于start_atand stop_before,负值意味着从列表的末尾开始计数,而不是从开始计数。例如-1将代表最后一个元素,-2倒数第二个元素等。例如:

nums = [1, 2, 3, 4, 5]

nums[1:-2]    # [2, 3]      (start at 1, stop before 2nd to last)
nums[-3:-1]   # [3, 4]      (start at 3rd to last, stop before last)

负数step意味着列表被反向切片(从结尾到开头)。这也意味着start_at应该大于stop_before并且stop_before在反向步幅的上下文中更像是stop_after如果您正在查看非反向列表。例如:

nums = [1, 2, 3, 4, 5]

nums[::-1]    # [5, 4, 3, 2, 1]   (reversed)
nums[4:1:-1]  # [5, 4, 3]   (reversed, start at 4, stop after 1)
nums[-1:1:-2] # [5, 3]      (reversed, start at last, stop after 1, every 2nd)

ʕ•̫͡• ʔ 空切片

请记住,切片表示法非常宽容,因此如果参数的值超出列表的范围,您将得到一个空列表。例如:

nums = [1, 2, 3, 4, 5]

nums[6:8]     # []
nums[:-10]    # []

5.2理解 Python 的切片赋值

ಡ ಡ基本语法

为了理解 Python 的切片分配,您至少应该对切片的工作原理有一个很好的了解。这是一个快速回顾:

[start_at:stop_before:step]

切片赋值与切片列表的语法相同,唯一的例外是它用在表达式的左侧而不是右侧。由于切片返回一个列表,切片赋值需要一个列表(或其他可迭代的)。而且,顾名思义,右侧应该是分配给表达式左侧切片的值。例如:

nums = [1, 2, 3, 4, 5]

nums[:1] = [6]        # [6, 2, 3, 4, 5]   (replace elements 0 through 1)
nums[1:3] = [7, 8]    # [6, 7, 8, 4, 5]   (replace elements 1 through 3)
nums[-2:] = [9, 0]    # [6, 7, 8, 9, 0]   (replace the last 2 elements)

ಡ ಡ改变长度

表达式左侧切片返回的列表部分是将通过切片赋值更改的列表部分。这意味着您可以使用切片分配将列表的一部分替换为长度也与返回切片不同的不同列表。例如:

nums = [1, 2, 3, 4, 5]

nums[1:4] = [6, 7]    # [1, 6, 7, 5]        (replace 3 elements with 2)
nums[-1:] = [8, 9, 0] # [1, 6, 7, 8, 9, 0]  (replace 1 element with 3)
nums[:1] = []         # [6, 7, 8, 9, 0]     (replace 1 element with 0)

如果将空切片考虑在内,还可以将元素插入列表而不替换其中的任何内容。例如:

nums = [1, 2, 3, 4, 5]

nums[2:2] = [6, 7]    # [1, 2, 6, 7, 3, 4, 5]   (insert 2 elements)
nums[7:] = [8, 9]     # [1, 2, 6, 7, 3, 4, 5, 8, 9] (append 2 elements)
nums[:0] = [0]        # [0, 1, 2, 6, 7, 3, 4, 5, 8, 9] (prepend 1 element)
nums[:] = [ 4, 2]     # [4, 2]         (replace whole list with a new one)

ಡ ಡ使用步骤

最后但并非最不重要的step一点是,也适用于切片分配,您可以使用它来替换每个步幅后与迭代匹配的元素。唯一的区别是如果step不是1,插入的列表必须与返回的列表切片的长度完全相同。例如:

nums = [1, 2, 3, 4, 5]

nums[2:5:2] = [6, 7]  # [1, 2, 6, 4, 7] (replace every 2nd element, 2 through 5)
nums[2:5:2] = [6, 7, 8] # Throws a ValueError (can't replace 2 elements with 3)
nums[1::-1] = [9, 0]  # [0, 9, 6, 4, 7] (reverse replace, 1 through start)