第一章 Python基础
** 指数 2**3=8
// 整除/商数取整 22//8=2
% 取模/取余数
数据类型:整型、浮点型、字符串类型
可以使用字符串+字符串实现字符串的连接,还可以通过字符创*整型来实现字符串的复制
变量命名:
只能是一个词,不带空格
只能包含字母、数字和下划线
不能数字开头
第二章 控制流
break 跳出循环
continue 调回到循环开始处
range(5) 0 1 2 3 4
range(开始, 停止, 步长) 步长可以为负数
调用sys.exit() 可以提前终止或退出程序,该函数出于sys模块中
wins = 0 losses = 0 ties = 0 print('%s Wins, %s Losses, %s Ties' % (wins, losses, ties))
输出为:
0 Wins, 0 Losses, 0 Ties
第三章 函数
None 表示没有值
print("Hello", end='') print("world")
将默认的end换行替换掉
print('cats', 'dogs', 'mice', sep=',')
将默认的空格分隔字符串替换为逗号分隔字符串
局部和全局作用域:
全局作用域中的代码不能使用任何局部变量
局部作用域中的代码可以访问全局变量
一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量
在不同的作用域中,你可以用相同的名字命名不同的变量。
global语句:
如果需要在一个函数内修改全局变量,就使用global语句。
如果在函数的顶部有global eggs这样的代码,它是在告诉python:“在这个函数中,eggs指的的全局变量”
Collatz序列:
def collatz(number_1): if number_1 % 2 == 0: return number_1//2 elif number_1%2 == 1: return 3*number_1+1 try: number_2 = int(input("请输入一个数字\n")) except ValueError: print("输入整数!") else: while True: if collatz(number_2) == 1: print(collatz(number_2)) break else: number_2 = collatz(number_2) print(number_2) continue
第四章 列表
列表名[索引] 获取列表元素
索引可以是整数也可以是负数
利用切片获得子列表:
span[1:4]是一个列表和切片,从索引1开始,到索引4结束(不包含索引4)
列表连接:spam = spam_1 + spam_2
in noit in 来判断列表中是否存在某元素
列表还可以用于多重赋值
enumerate()函数与列表一起使用:
supply = ['pens', 'staplers', 'flamethrowers', 'binders'] for index, item in enumerate(supply): print(f"Index:{index} in supply is: {item}")
可以得到列表中的表项的索引和表项本身
random.choice()和列表一起使用
可以返回一个随机选择的表项
random.shuffle()和列表一起使用
可以对列表中的表项重新排序,该函数将就地修改列表,而不是返回新列表‘’
使用index()方法在列表中查找值
如果该值存在于列表中,就返回他的索引,如果不存在就报错
supply = ['pens', 'staplers', 'flamethrowers', 'binders'] print(supply.index('pens'))
sort()将列表中的值排序
不能对既有数字又有字符串值的列表排序
对字符串排序,使用ASCII字符顺序
如果需要按照普通的字典顺序来排序,就在调用sort()方法时,将关键字参数key设置为str.lower
使用reverse()方法反转列表中的值
列表是可变的数据类型,它的值可以添加、删除或改变,但是字符串是不可变数据类型,它不能被改变。元组也是不可变数据类型
使用list()和tuple()函数来转换类型
tuple()将传进的列表变成元组
list()将传进的元组变成列表
list()还可以将传进的字符串变成列表,'he' ['h', 'e']
引用
变量包含的实际上是对相应的值的引用,而不是包含值的本身!!! P198
x = 'Howdy' print(id(x)) x += 'what' print(id(x))
输出:
2469185556336
2469185556400
而列表不变:
x = ['Howdy', 'what'] print(id(x)) x.append('how') print(id(x))
输出:
2275408057024
2275408057024
python会自动删除任何变量未被引用的值
传递引用
参数传递给引用,形参得到的是引用
copy模块的copy()和deepcopy()函数
copy()不只是复制引用,而是复制列表或字典这样的可变值
而对于不可变值,可以借助下面的函数进行参考:
import copy x = 'alice' y = copy.copy(x) print(id(x)) print(id(y))
如果要复制的列表中包含了列表,那么就使用deepcopy(),deepcopy()函数将同时复制它们内部的列表
4.11.1 练习
def getlinks(spam): spam_1 = '' for item in spam: if spam.index(item) != len(spam)-1: spam_1 += f"{item} " elif spam.index(item) == len(spam)-1: spam_1 += f"and {item}" return spam_1 spam = ['apples', 'bananas', 'tofu', 'cats'] print(getlinks(spam))
第五章 字典和结构化数据
字典中的项是不排序的,所以不能像列表那样切片
keys() values() items()方法
以上三种方法将返回字典的键、值、键值对
可以使用in 和 not in 检查字典中是否存在键或值
get()方法
它有两个参数,分别为要取得其值的键,以及当该键不存在时返回的备用值
dictionary.get()
setdefault()方法
setdefault()提供了一种方法,可以在一行中完成这件事,传递给该方法的第一个参数是要检查的键,第二个参数是当该键不存在时要设置的值,如果该键确实存在,那么setdefault()方法就会返回键的值。
美观地输出 pprint()、pformat()函数
如果程序导入了pprint模块,就可以使用pprint()和pformat()函数,它们将美观地输出一个字典的字。如果希望将美观的文本作为字符串输出,而不显示在屏幕上,那就调用pprint.pformat()函数。
字符串操作
转义字符
\' 单引号
\" 双引号
\t 制表符
\n 换行符
\\ 倒斜杠
可以在字符串开始的引号前加上r,使它成为原始字符串,原始字符串完全忽略所有的转义字符,可输出字符串中所有的倒斜杠。
print(r'That is Carol\'s cat')
用三重引号的多行字符串
print中三重引号之间的所有引号,制表符或换行符,都被认为是字符串的一部分,\n除外,在三重引号中,回车换行也会体现在输出内容中。转义字符仍然有效。
注释
单行用#号,多行用三重引号
字符串的索引和切片
注意,字符串切片并没有修改原来的字符串。可以从一个变量中获取切片,记录在另一个变量中。
字符串中的in和not in 操作符
和列表一样,in和not in操作符也可以用于字符串。
将字符串放入其他字符串
巧用“字符串插值”
name = 'AI'
age = 4000
print("Hello, my name is %s. I am %s years old" % (name, age))
字符串方法upper(), lower(),isupper(),islower()
upper()和lower()字符串方法返回一个新字符串,其中原字符串的所有字母都相应地转换为大写或小写,字符串中的非字母字符保持不变。
注意这些方法没有改变字符串本身,而是返回一个新字符串,如果你希望改变原来的字符串,那就必须在改字符串上调用upper()或lower()方法,然后将这个字符串赋给保存原来字符串的变量
spam = spam.upper()
如果字符串中含有字符,并且所有字母都是大写或小写,那么isupper()和islower()方法都会相应地返回布尔值True;否则,该方法返回False。
isX()字符串方法
isalpha() 如果字符串只包含字母,并且非空,返回True
isalnum() 如果字符串只包含字母和数字,并且非空。返回True
isdecimal() 如果字符串只包含数字字符,并且非空,返回True
isspace() 如果字符串只包含空格、制表符和换行符,并且非空,返回True
istittle() 如果字符串仅包含以大写字母开头、后面都是小写字母的单词、数字或空格,返回True
字符串方法startswith()和endswith()
如果startswith()和endwith()方法所调用的字符串以改方法传入的字符串开始或结束,那么返回True,否则返回False
字符串方法join()和split()
join()方法可在字符串上被调用,参数是一个字符串列表,返回一个字符串。
注意,调用join()方法的字符串被插入列表参数中每个字符串的中间。
要记住,join()方法是针对一个字符串调用的,并且需要传入一个列表值。
split()方法做的事情正好相反,它针对一个字符串调用,返回一个字符串列表,默认情况下,split()方法按照各种空白字符分隔。也可以向split()方法传入一个分隔字符串,指定它按照不同的字符串分隔。
使用partition()方法分隔字符串
partition()字符串方法可以将字符串分成分隔符字符串前后的文本。
print('Hello,world'.partition('w'))
输出:
('Hello,', 'w', 'orld') 元组
如果传递给partition()方法的分隔符字符串在partition()调用的字符串中多次出现,则该方法仅在第一次出现处分隔字符串。
如果找不到分隔字符串,则返回的元组中的第一个字符串将是整个字符串,而其他两个字符串为空
可以利用多重赋值技巧将3个返回的字符串赋给3个变量
before, sep, after = 'Hello,world'.partition('w') print(before) print(sep) print(after)
用rjust()、ljust()、center()方法对齐文本
rjust()、ljust()字符串方法返回调用它们的字符串的填充版本,通过插入空格来对齐文本。这两个方法的第一个参数是一个整数,代表长度,用于对齐字符串。
'Hello'.rjust(10)表示我们希望右对齐,在'Hello'放在一个长度为10的字符串中
rjust()、ljust()的第二个可选参数将指定一个填充字符,用于取代空格字符
print('Hello'.rjust(10, '*'))
输出:
*****Hello
center()方法与rjust()、ljust()字符串方法类似,但是它让文本居中
用strip()、rstrip()、lstrip()方法删除空白字符
strip()字符串方法将返回一个新的字符串,它的开头和末尾都没有空白字符串
spam.strip('ampS')告诉在变量中存储的字符串两端,删除出现a、m、p和大写S
strip('ampS')和strip('maSp')效果一样
使用ord()和chr()函数的字符的数值
计算机将信息存储为字节(二进制数字串),这意味着我们要能够将文本转换为数字,因此,每个文本都有一个对应的数字值。
我们可以用ord()函数获取一个单字符字符串的代码点
用chr()获取一个整数代码点的单字符字符串
ord('A')
chr(65)
print(ord('砂')) print(chr(30722))
用pyperclip模块复制粘贴字符串
pyperclip模块有copy()和paste()函数,可以向计算机的剪贴板发送文本或从它接收文本。
这个模版不是Python自带的,需要从第三方安装