python笔记

written by oneman233
2021-05-03

f-string

python的一种格式化字符串,可以方便地替换字符串某一部分的内容,用法如下:

a = "ABC"
print(f"output:{a}")
print(f"output:{a.lower()}")

运行结果如下:

output:ABC
output:abc

大括号中的内容被自动替换成了对应的变量值,甚至是函数的返回值,详细可以参考官方文档

类的写法

基本写法如下:

class A:
    def __init__(self,x):
        self.x=x
    def fun(self):
        return self.x

注意:

  1. __init__()函数是构造函数
  2. 每一个函数的第一个参数都是self,否则会报错:takes 0 positional arguments but 1 was given
  3. 成员变量不用定义,直接使用self.x来赋值和调用即可

调用函数和类

假设在A.py中有以下函数:

def fun(a):
    return a

调用函数:

import A
A.fun(a)

或者写成:

from A import *
fun(a)

假设在A.py中有以下类定义:

class A:
    def __init__(self,x):
        self.x=x
    def fun(self):
        return self.x

调用类:

import A
a=A.A(1)
from A import *
a=A(1)
a.fun()

长度

  1. len(list):返回列表长度
  2. len(s):返回字符串长度

range()用法

函数定义:

range(start, stop, step)

代表着遍历区间[start, stop),步长为step

默认步长为$1$,默认起点为$0$

读写JSON

把python对象打包成json:

import json

data = {
    'name' : 'ACME',
    'shares' : 100,
    'price' : 542.23
}

json_str = json.dumps(data)

把json拆开成dist对象:

data = json.loads(json_str)

注意:python的dist对象跟c++的map差不多,必须用dist["key"]来访问val

参考资料

随机数生成

random.randint(a,b)

生成的随机数范围为$[a,b]$

exec用法

exec()函数可以用于动态执行脚本,只需要将需要执行的Python脚本以字符串形式传入即可,就像下面这样:

exec('a=5')

但是有个问题,执行了上面这条语句之后尝试获取变量时会报错:Variable a is not defined,正确的调用方法应该像下面这样:

exec('a=5')
print(locals()['a'])

Python时间函数

  1. time.time():返回自纪元以来的秒数作为浮点数
  2. time.perf_counter():返回性能计数器的值
  3. time.process_time():返回当前进程的系统和用户CPU的时间总和值

测量程序的运行时间可以在程序运行前后调用时间函数,用两次结果做差来获得

一个字符串错误

报错:not all arguments converted during string formatting

两种可能:

  1. 字符串格式化的时候参数不完整
  2. 拿着一堆字符串做加减乘除等等数学运算

字符串和数字以及数字间的互化

数字化字符串很简单,用str()函数即可

int()函数则可以用于将字符串转化为整形,但是默认只能转化成十进制数,比如下面这样:

int('1010')
>>> 1010

如果想指定基数,可以加入一个参数:

int('1010', base = 2)
>>> 10

基数不一定局限为10、8、16等等:

int('10', base = 3)
>>> 3

此外,想要把整型数字转换为十六进制字符串时可以使用hex()函数:

hex(100)
>>> '0x64'

判断是否为空

采用以下写法:

if x is None:
    # do something

字典中键是否存在

如果采用dist[key]这样的调用方式,当key不存在时就会报错:KeyError

有几种可用的方法:

  1. 调用前判断一下dist[key]是否为空
  2. 采用dist.get(key,'not exist'),这样当key为空时就会返回一个字符串,当然也不局限于字符串,可以是其他任何类型数据
  3. 可以向类添加__missing__(self, key)方法,如下所示:
t = {
    'a': '1',
    'b': '2',
    'c': '3',
}

class Counter(dict):
    def __missing__(self, key):
        return key
c = Counter(t)
print(c['d'])
print(c)
>>> d
>>> {'c': '3', 'a': '1', 'b': '2'}

参考

输出不换行

可以使用print(x, end='')来自定义输出结尾的符号,例如:

x = [1, 2, 3]
for xx in x:
    print(xx, end = ',')
>>> 1,2,3,

类型注解

def add(x:int, y:int) -> int:
    return x + y

指明了函数的返回值类型,但是这些注解并不提供校验,函数仍然可以返回任意类型

a: int = 123
b: str = 'hello'
l: List[int] = [1, 2, 3]

变量也是可以进行类型注解的