Python

基础

数运算

x // y 两数相除取整数

x % y 两数相除取余数

abs(x) 取绝对值

int() 转换成整数

float() 转换成浮点数

divmod(x, y) 输出两数相除整数与余数

x ** yx的y次方

pow(x, y) x的y次方

pow(x, y, z) 将z与x的y方相除,输出余数

填充

x.center(weight, y) 填充空格或y(如果有的话,下同),字符串居中,有

x.ljust(weight, y) 左填充空格

x.rjust(weight, y) 右填充空格

x.zfill(weight) 左填充0

函数

global 语句

原始:

a = 100
def func():
	a = 200
	print("'a' in func" ,a)

测试一下:

>>> func()
'a' in func 200
>>> print(a)
100

可以看到,此时a变量在func函数内的值变为了200,但其全局变量值仍然为100。

那么,如何在函数内部修改一个变量的全局变量呢?

a = 100
def func():
	global a
	a = 200
	print("'a' in func" ,a)

测试一下:

>>> print(a)
100
>>> func()
'a' in func 200
>>> print(a)
200

调用函数前,a的全局变量为100,调用函数后,a的全局变量被覆盖为200。

嵌套函数 与 nonlocal语句

a = 0
def funcA():
    a = 100
    def funcB():
	    a = 200
	    print("In funcB,a =", a)
	funcB()
	print("In funcA,a =", a)

run:

>>> funcA()
In funcB,a = 200
In funcA,a = 100
>>> print(a)
0

试图使用nonlocal语句在funcB修改funcAa的局部变量但不影响到全局:

a = 0
def funcA():
     a = 100
     def funcB():
        nonlocal a
        a = 200
        print("In funcB,a =", a)
    funcB()
    print("In funcA,a =", a)

run:

>>> funcA()
In funcB,a = 200
In funcA,a = 200
>>> print(a)
0

map(sum, accounts)

  • map() 函数:将指定的函数应用于可迭代对象的每个元素
  • sum 函数:计算列表元素的总和
  • 这行代码的效果:对每个客户的账户列表求和
  • 示例应用过程:
输入:accounts = [[1,2,3], [4,5], [6]]
map(sum, accounts) 结果 → [sum([1,2,3]), sum([4,5]), sum([6])] = [6, 9, 6]

位运算

bit_length() 与 bit_count()

bit_length() - 获取二进制表示的最小位数

功能

返回表示该整数所需的最少二进制位数(不包括符号位和前导零)。

特殊处理:0 的位长为 0

示例

num = 5   # 二进制: 101
print(num.bit_length())  # 输出: 3(需要3位表示)

num = 10  # 二进制: 1010
print(num.bit_length())  # 输出: 4

num = 0
print(num.bit_length())  # 输出: 0

num = -7  # 二进制: ...1111111111111001(补码)
print(num.bit_length())  # 输出: 3(与正数7相同)

bit_count() (Python 3.10+) - 计算二进制中1的个数

功能

返回整数二进制表示中 值为1的位的数量(也称为”汉明重量”或”population count”)。

示例

num = 5   # 二进制: 101
print(num.bit_count())   # 输出: 2

num = 10  # 二进制: 1010
print(num.bit_count())   # 输出: 2

num = 0
print(num.bit_count())   # 输出: 0

num = -1  # 二进制: 所有位均为1
print(num.bit_count())   # 输出: 无限?实际返回一个非常大的数

负数处理

对于负数,Python 使用无限位的二进制补码表示

-1 的二进制表示  ...1111111111111111所有位为1
-5 的二进制表示  ...1111111111111011

因此 bit_count() 对负数的行为:

  • 对负数返回其补码表示中1的数量
  • 因为使用无限位表示,负数会返回非常大的数字

from collections import defaultdict

freq = defaultdict(int)

使用 defaultdict(int) 自动初始化不存在的键为 0

其他

Python导入不同路径文件

wuko’s blog

results matching ""

    No results matching ""