Python 语法笔记

Posted by WHZ0325 on 2022-10-15, Viewed times

内容全部摘自一个讲 Python 语法的网站,算是个速查吧。

基础

  • 注释:单行注释 #,多行注释用 '''""" 包裹。
  • 缩进须严格一致,\ 用于换行继续写。
  • 字符串不区分单双引号,三引号可表示多行字符串。
  • 使用 r"string\n" 可以让 \ 不转译。
  • 字符串取子串用 [首下标:尾下标:步长],负数代表倒着数。
  • 字符串加法代表连接,乘法代表重复。
  • print() 默认换行,可指定 print(element, end="") 设置不换行。
  • 导入:importfrom module import functionfrom module import *

数据类型

  • 类型名首字母大写,支持复数 1+2jcomplex(1, 2)
  • type() 查询变量的类型,isinstance(a, Int) 会判断变量是否为指定类型(子类也算哦)。
  • 删除对象 del ver_1, ver_2
  • / 得到浮点数,// 得到整数,** 是乘方。
  • 列表类型 List["", "", ""] 里啥都能塞。
  • 技巧 list = list[-1::-1] 反转一个列表(步长 $-1$)。
  • 元组类型 Tuple("", "", "") 内元素不能修改。
  • 集合类型 Set{"", "", ""}set(""),可以用 - 求差集,用 & 求交集,用 求并集,用 ^ 求不同元素。
  • 字典类型 Dictionary["location"] = 1,可用 dictionary.keys()dictionary.values(),构造函数 dict([("one", 1), ("two", 2)])dict(one = 1, two = 2)。(感觉就是个 map【逃)
  • 一些好用的函数:hex(x) 将整数转为十六进制字符串,oct(x) 将整数转为八进制字符串,ord(x) 将字符转为整数, chr(x) 将整数转为字符,eval(str) 计算字符串中的表达式……

推导式

一个有趣的东西。

  • 列表的例子:[name.upper() for name in names if len(name) > 3]
  • 列表的例子:[i for i in range(30) if i % 3 == 0]
  • 字典的例子:{key: len(key) for key in strings}
  • 集合的例子:{i**2 for i in (1, 2, 3)}
  • 集合的例子:{x for x in "abcdef" if x not in "abc"}
  • 元组的例子:(x for x in range(1, 10))

Python3 太强了,感觉再也不想用 C 了也说不定?明天接着写。


然后就拖到后天了(

  • f"{}" 字符串前加 f 表示允许出现 {} 包裹的 Python 表达式。(顺便字符串前加的 r 是 raw 的缩写)
  • 海象运算符 :=,目前觉得是在表达式中赋值,不太清楚到底怎么个用法。
  • Python 可以直接用关键字 andornot,如 a and b
  • 还有:innot in 以及 isis not(引用变量是否为同一个)。
  • id() 函数用于获取对象内存地址。

数学相关

(使用需要如 math.modf(x)

1
import math

基本函数 abs(x)ceil(x)floor(x)exp(x)fabs(x)log(x)log10(x)max(x1, x2, ... , xn)min(x1, x2, ... , xn)pow(x, y)round(x[, n])sqrt(x)

modf(x) 用于返回整数部分和小数部分。

hypot(x, y) 用于返回 $\sqrt{x^2+y^2}$。

degrees(x) 弧度转角度,radians(x) 角度转弧度。

数学常量 pie

1
import random

choice(seq) 在序列中随机挑选,randrange([start, ]stop[, step])random() 生成 $[0,1)$ 范围内的随机数,seed([x])suffle(seq) 将序列打乱,uniform(x, y) 随机生成 $[x, y]$ 范围内的实数。


“字符串”到“集合”这几节先鸽着。


分支

1
2
3
4
5
if 表达式:
#
elif 表达式:
#
else:

循环

1
2
3
4
5
while 表达式:
break
continue
pass # 没用语句
else:

压行:while (not yahangdamie): print("压行啦!!!")

1
2
3
4
5
6
7
8
9
10
11
for x in ["C", "C++", "Python"]:
#
else:
#
for x in range(5):
# 0 -> 4
for x in range(5, 9):
# 5 -> 8
for x in range(0, 10, 3):
# 0 3 6 9
list(range(5)) # [0, 1, 2, 3, 4]

函数

1
2
3
def function0():
print("function0")
return
  • 传参时形式参数和实际参数指向同一个 $id$,内容改变后指向不同 $id$(用 id(x) 查看)。
  • 函数内可变对象(如列表)改变会影响函数外。
  • 可以设置参数默认值 function0(author = "whz0325"),可以在调用时指定参数 function0(name = "whz", id = 325)

不定长参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def test(*tmp): # * 传入元组
for x in tmp:
print(x)
test(1.0, 2, "string")

def test2(**dic): # ** 传入字典
for (a, b) in dic.items():
print(a, b)
for key in dic.keys():
print(key + ': ' + str(dic[key]))
for value in dic.values():
print(value)
return
test2(a=1, b=2)

也可以 def test2(a, b, *, c)

匿名函数:

1
2
func = lambda x, y: x + y
print(func(1, 2))

字符串

  • [left, right] 取子串,下标 $0$ 开始,左开右闭,可省略某项,负数从 $-1$ 开始倒数。
  • C 语言中的转义字符也可以用:\175 表示八进制数,\x6a 表示十六进制数。
  • 获取字符串的长度:len(s)

格式化:

1
2
3
name = "whz0325"
age = 18
print("%s de age is forever %d" % (name, age))

%e 为科学计数法形式的浮点数,%o 为八进制,%x 为十六进制(%X 为大写)。

1
2
3
pi = 3.1415926
print("%010.3f" % pi) # "000003.142"
print("%10.3f" % pi) # " 3.142"

函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
s = "whz0325"
print(s.capitalize()) # Whz0325
print(s.center(12, "_")) # __whz0325___
print(s.count('0')) # 1
print(s.count('0', 4, len(s))) # 0
print(s.endswith('32', 0, len(s) - 1)) # True
print(s.find('250', 0, len(s))) # -1
print(s.isalnum()) # True
print(s.isalpha()) # False
print(s.isdigit()) # False
# isupper() islower()
print(" ".join(["whz0325", "and", "his", "friends"])) # whz0325 and his friends
# max(s) min(s)
print("ababab".replace("ab", "cd", 2)) # cdcdab

列表

  • 像数组一样的东西,可以搞二维列表
  • ['a', 'b', 'c'].append('d')
  • del list[-2] 删除倒数第二个元素(可以删除中间元素)。
  • max(list)min(list) 返回列表最值。

排序和其它函数明天更。

迭代器

坑着。