计算思维 Computational Thinking
1、核心特征:
- Abstraction(抽象)
- Automation(自动化)
2、 e.g:
- 递归思维(Hanoi),并行处理。 代码 ⟷ 译出 数据 代码 \stackrel{\text{译出}}{\longleftrightarrow} 数据 代码⟷译出数据
- 约简、嵌入、转化、仿真
- 抽象、分解
Python解释器
CPython用>>>作为提示符,IPython用ln [序号]:作为提示符
1、CPython:
- 在命令行下运行python就是启动CPython解释器
- 用C语言开发
2、IPython:
- 基于CPython之上的交互式解释器
3、PyPy
采用JIT技术,动态编译(不是解释)→显著提高Python代码执行速度
4、Jython运行在Java平台
可以直接把Python代码编译成Java字节码执行
5、IronPython运行在微软.Net平台
和Jython类似,可以直接把Python代码编译成**.Net的字节码**
如果要和Java或.Net平台交互,最好通过网络调用来交互,而不是用Jython/IronPython,确保各程序之间的独立性
Python交互模式:
命令行模式下敲命令python,然后进入到Python交互模式,提示符是>>>
内容的输入输出
1、输出print():
可以接受多个字符串,“,”隔开,可连成一串输出
依次打印每个字符串,遇到“,”输出一个空格
2、输入input()
可让用户输入字符串,并存放到变量里
标识符
用于变量、函数、类、模块等的名称
- 区分大小写
- 第一个字符必须是字母、下划线,其后字符是:字母、数字、下划线
- 不能使用关键字,如: if, or, while
- 双下划线开头和结尾 → \to →特殊含义,如:__init__是类的初始函数
async声明异步,await等待异步
对象——Python中一切皆对象
对象本质:一个内存块,拥有特定值,支持特定类型的相关操作
每个对象由标识identity、类型type、value值组成
1.identity:
唯一标识对象,对应于对象在内存中的地址
内置函数id(obj)→返回对象obj标识
2.type:
对象存储的"数据"类型。类型可以限制对象取值范围以及可执行操作type(obj)→对象所属类型
3.value:
对象所存储的数据的信息
print(obj)→直接打印出值
内存中对象存储
变量赋值基础
-
X=y=z=9
:链式赋值,X
、y
和z
都赋值为9
-
X, y, z = 9, 8, 7
:序列解包赋值,X
→9
,y
→8
,z
→7
。 -
*y = 9, 8, 7
:不合法,*y
→对y
进行解包,但前面没有变量名接收值 -
x = 9,8,7
:不合法
Python数据类型
- Basic/Primitive –Int, Float, Complex, Bool, String
- Container/Collections –List, Tuple, Set, Dictionary
- None
- User Defined –class
- bytes
1.可变对象(mutable object):
字典、列表、集合、自定义对象(依赖用户定义的对象特征)
可变对象的值能被修改
2.不可变对象(immutable object) :
数字、字符串、元组、None等,不可变对象的访问速度更快
不可变对象一旦被创建,其id与type便无法再修改
变量类型 - type() 函数
类型转换
1.隐式(向上转换)
Implicit Type Casting (or Implicit TypeConversion or Upcasting
2.显式类型转换
Python二进制、八进制和十六进制:
1.bin()
100→二进制数,前缀 “0b”
2.oct()
100→八进制数,前缀 “ 0o ”
3.hex()
100→十六进制数,前缀 “0x”
Python字符串——字符的集合
- Python将字符串存储为一个序列,可使用索引位置访问序列中的任何元素
- 使用单或双引号创建字符串
1.转义字符
2.多行字符串
- 单/双三引号创建多行字符串,它还将保留制表符和空白
3.[:]
4.+ *
str = 'Hello World!'
print (str) # Prints complete string
print (str[0]) # Prints first character of the string
print (str[2:5]) # Prints characters starting from 3rd to 5th(包头不包尾)
print (str[2:]) # Prints string starting from 3rd character
print (str * 2) # Prints string two times
print (str + "TEST") # Prints concatenated string
输出:Hello World!
H
llo
llo World!
Hello World!Hello World!
Hello World!TEST
5.Various String Operators(gpt提供)
+Concatenation连接
*Repetition
[]Slice:str[i]
[:]Range Slice
str[i:j] 返回从索引 i 到 j(不包括 j)的子串
in - Membership:
x in str 子串 x 存在于str 中,返回 True。
not in - Membership:
x not in str 子串 x 不存在于 str 中,返回 True
r/R - Raw String原始字符串:
创建原始字符串,不对转义序列进行解释
e.g:r"\n"
% - Format格式化:
字符串格式化
%s - 字符串 %d - 整数
%f - 浮点数 %.2f - 浮点数替换,保留两位小数
字符串方法(gpt提供)
这张名为 “image.png” 的图片似乎是一个关于 Python 字符串方法的参考表或列表。它列出了一系列常用的 Python 字符串方法,以及它们的基本用途。下面是每个方法的简要说明:
-
join(seq)
:将序列中的元素连接成一个字符串,元素之间用调用join()
方法的字符串分隔。 -
capitalize()
:第一个字母大写,其余字母小写。 -
lower()
:所有大写字母→小写 -
upper()
:所有小写字母→大写 -
title()
:每个单词首字母大写 -
swapcase()
:大写字母→小写,小写字母→大写 -
count(str, beg=0, end=len(string))
:返回子串str
在给定范围内出现的次数 -
len(string)
:返回字符串长度 -
translate(table, deletechars="")
:根据给定转换表table
替换字符串中的字符,deletechars
中的字符将被删除 -
rindex(str, beg=0, end=len(string))
:从末尾开始查找子串str
,返回第一次出现的索引,未找到则抛出异常。 -
max(str)
:返回最大字符 -
find(str, beg=0, end=len(string))
:从开始查找子串str
,返回第一次出现的索引,未找到则返回-1
-
rjust(width, [, fillchar])
:右对齐,给定宽度,fillchar
填充空白 -
index(str, beg=0, end=len(string))
:从开始查找子串str
,返回第一次出现的索引,未找到则抛出异常。 -
rfind(str, beg=0, end=len(string))
:从末尾开始查找子串str
,返回最后一次出现的索引,未找到则返回-1
。 -
ljust(width[, fillchar])
:左对齐,给定宽度,fillchar
填充空白 -
replace(old, new[, max])
:将字符串中的old
子字符串替换为new
子字符串,最多替换max
次 -
min(str)
:返回最小字符 -
center(width, fillchar)
:居中,给定宽度,fillchar
填充空白 -
isspace()
:字符串是空白字符(空格、制表符、换行符)返回True
-
isalpha()
:字符串至少有一个字符且所有字符都是字母返回True
-
isalnum()
:字符串至少有一个字符且所有字符都是字母/数字返回True
-
istitle()
:字符串标题化的(每个单词首字母大写)返回True
。 -
isdecimal()
:字符串只包含十进制数字返回True
。 -
isnumeric()
:字符串只包含数字字符返回True
-
islower()
:所有字母小写返回True
-
isdigit()
:字符串只包含数字返回True
-
isupper()
:所有字母大写返回True
-
split(str="", num=string.count(str))
:将字符串分割成多个子字符串,str
分隔符,num
最大分割次数 -
splitlines([keepends])
:将字符串分割成多行,每行作为列表的一个元素,keepends
决定是否保留行尾的换行符 -
lstrip()
:去除左侧空白字符 -
rstrip()
:去除右侧空白字符 -
strip([chars])
:去除2侧指定字符(默认为空白字符) -
expandtabs(tabsize=8)
:将字符串中的制表符扩展为一定数量的空格,tabsize
是扩展的空格数 -
endswith(suffix, beg=0, end=len(string))
:检查字符串是否以suffix
结尾 -
startswith(substr, beg=0, end=len(string))
: -
bytes.decode(encoding="utf-8", errors="strict")
:解码为字符串 -
maketrans()
:转换表 -
encode(encoding='UTF-8', errors='strict')
:编码为字节对象,encoding
编码格式,errors
错误处理方案
列表 List
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
tinylist = [123, 'john']
print (list) # Prints complete list
print (list[0]) # Prints first element of the list
print (list[1:3]) # Prints elements starting from 2nd till 3rd
print (list[2:]) # Prints elements starting from 3rd element
print (tinylist * 2) # Prints list two times
print (list + tinylist) # Prints concatenated lists
输出:['abcd', 786, 2.23, 'john', 70.2]
abcd
[786, 2.23]
[2.23, 'john', 70.2]
[123, 'john', 123, 'john']
['abcd', 786, 2.23, 'john', 70.2, 123, 'john']
list=['physics','chemistry', 1997, 2000]
print(list)
del list[2]
print ("After deleting value at index 2 : ", list)
输出:['physics', 'chemistry', 1997, 2000]
After deleting value at index 2 : ['physics', 'chemistry', 2000]
这张名为 “image.png” 的图片包含了一个关于 Python 列表(list)方法的概述。列表是 Python 中的一种数据结构,用于存储有序的元素集合。图片中列出的是一些常用的列表方法,每个方法后面跟着一个简短的描述。下面是每个方法的详细解释:
List Methods(参考gpt)
-
list.append(obj)
:
列表末尾添加元素obj
-
list.extend(seq)
:
将一个序列seq
的元素添加到列表末尾 -
list.pop(obj=list[-1])
:
移除列表中的一个元素(默认是最后一个元素),并返回该元素 -
list.clear()
:
清空所有元素 -
list.remove(obj)
:
移除列表中第一个匹配的元素obj
-
list.insert(index, obj)
:
在指定位置index
插入元素obj
-
list.reverse()
:
颠倒元素顺序 -
list.sort([func])
:
排序。func
是一个可选的排序函数,提供自定义排序逻辑 -
list.count(obj)
:
返回obj
在列表中出现次数 -
list.index(obj)
:
返回obj
在列表中首次出现的索引位置
nums= [1, 2, 2, 2, 3, 4, 2]
for num in nums:
print(num)
if (num== 2):
nums.remove(2)
print(nums)
输出:
1
2
2
4
2
[1, 3, 4, 2]
-
sort()
:
排序,没有返回值。 -
reverse()
:
颠倒,没有返回值。 -
sorted()
:
内置函数,对任何可迭代对象进行排序,并返回一个新的排序列表 -
reversed()
:
内置函数,用于返回一个逆序序列的迭代器,它不会改变原始列表。 -
sorted()
函数参数:sorted(itrearble, key=None, reverse=False)
iterable
:要排序的可迭代对象。key
:函数,用来在进行比较之前对每个元素进行转换,排序会基于转换后的值进行。reverse
:布尔值,True
降序排序
- 列表切片
[::-1]
:
List[::-1]
不改变原始列表,而是返回一个新的逆序列表。
s = 'acbegscVAB'
result = sorted(s, reverse=True)# 将字符串 `s` 降序排序
print(result)
输出:
['s', 'g', 'e', 'c', 'c', 'b', 'a', 'V', 'B', 'A']
元组 tuple——tup = () 创建一个空元组
单元素元组的表示 (1, )
序列与其他类型的对比——词典排序
序列对象可以与具有相同序列类型的其他对象进行比较
词典排序使用 Unicode 代码点编号对单个字符排序
对前2个项目进行比较,两者不同则决定比较结果
↓
相等则对下2个项目进行比较,依此类推
↓
2个项目本身是同一类型序列,递归词性比较
↓
2个序列的所有项目比较结果相等→相等
↓
一个序列是另一个序列的初始子序列,则较短序列是较小/少的序列
使用 < 或 > 比较不同类型的对象合法的前提是对象具有适当的比较方法
混合数值类型根据数值进行比较,0 == 0.0→true
字典Dictionary——dict = {}
tinydict = {'name': 'john', 'code':6734, 'dept': 'sales'}
print (dict['one'])
print (dict[2])
print (tinydict)
print (tinydict.keys())
print (tinydict.values())
输出:dict['one']
dict[2]
{'name': 'john', 'code': 6734, 'dept': 'sales'}
dict_keys(['name', 'code', 'dept'])
dict_values(['john', 6734, 'sales'])
字典 Dictionary Method & Description(参考gpt)
-
dict.fromkeys()
:- 创建新字典,包含从序列
seq
中获取的键,值设置为value
。
- 创建新字典,包含从序列
-
dict.update(dict2)
:- 将
dict2
键值对添加到dict
中 dict
包含相同键→dict2
值会覆盖dict
值
- 将
-
dict.copy()
:- 返回
dict
的浅拷贝(shallow copy)。 - 浅拷贝→新字典和原字典的键值对相同,但如果值是可变对象(列表或字典),则它们会指向同一个对象。
- 返回
-
dict.setdefault(key, default=None)
:- 获取
key
对应值。如果key
不在字典中,则将key
添加到字典中,值设置为default
- 获取
-
dict.has_key(key)
:
Python 3 已移除。使用key in dict
或key not in dict
检查键是否存在
这张名为 “image.png” 的图片提供了关于 Python 字典(dictionary)的一些常用方法及其简要描述。这些方法用于操作和获取字典中的信息。下面是每个方法的详细解释: -
dict.clear()
:清空字典 -
del dict[key]
:删除特定键及对应值 -
dict.pop(key)
:删除特定键key
并返回对应值。如果键不存在于字典中,可以提供一个默认值,否则抛出KeyError
-
dict.popitem()
:删除并返回包含最后一个键值对的元组。字典为空→抛出KeyError
-
dict.get(key, default=None)
-
dict.items()
:返回包含字典键值对的视图对象,每个元素都是一个(key, value)
元组 -
dict.keys()
: -
dict.values()
:
del dict# delete entire dictionary
dict特点:
▪ 查找和插入的速度极快,不随key增加而变慢
▪ 占用大量的内存——空间换取时间
list特点:
▪ 查找和插入的时间随着元素的增加而增加
▪ 占用空间小
Python 集合Set——无序唯一元素的集合
"{}“定义集合。默认大括号用于字典,但使用”,"分隔元素列表则视为集合
set() 函数创建集合
没有索引位置, 不可变
-
add()
:添加新元素 -
clear()
:删除所有元素 -
copy()
:浅拷贝 -
difference()
:返回差集,即存在于第一个但不在第二个集合中的元素 -
discard()
:
移除元素,如果元素不存在于集合中,则不执行任何操作,也不抛出错误 -
intersection()
:返回交集 -
issubset()
:检查第一个集合是否是第二个集合的子集。 -
issuperset()
:检查第一个集合是否是第二个集合的超集 -
pop()
:随机移除并返回集合中的一个元素 -
remove()
:
移除特定元素,如果元素不存在于集合中,则抛出KeyError
-
union()
:返回并集 -
update()
:
将2个或多个集合的元素合并到第一个集合中,不创建新集合
Python bytes——Python 3.x 新增类型
▪ bytes以字节序列(二进制形式)存储数据。 字节串 → 字符编码方式(字符集) 字符串 字节串\xrightarrow{\text{字符编码方式(字符集)}}{字符串} 字节串字符编码方式(字符集)字符串
#构造函数创建空bytes
b1 = bytes()
#空字符串创建空bytes
b2 = b''
#b前缀将字符串转换成bytes
b3 = b'http://c.biancheng.net/python/'
print("b3: ", b3)
print(b3[3])
print(b3[7:22])
#为bytes()方法指定字符集
b4=bytes('C语言中文网8岁了',encoding='UTF-8')
print("b4: ", b4)
#encode()方法将字符串转换成bytes
b5="C语言中文网8岁了".encode('UTF-8')
print("b5: ", b5)
输出:b3: b'http://c.biancheng.net/python/'
112(p对应十进制是112)
b'c.biancheng.net'
b4: b'C\xe8\xaf\xad\xe8\xa8\x80\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x918\xe5\xb2\x81\xe4\xba\x86'
b5: b'C\xe8\xaf\xad\xe8\xa8\x80\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x918\xe5\xb2\x81\xe4\xba\x86'
变量赋值进阶
Interning in Python (Optimization)
1.None
2.Address of Integer Inside Range (-5 to 256)
3.Strings字符串采用驻留机制
• 字符串len为0或1
• 字符串len>1且只包含大小写字母、数字、下划线
• 字符串只在编译时进行驻留,而非运行时
Pyhton提供intern方法强制驻留
strl='sten'+'waves'# compile_time
print(strl is 'stenwaves')
str3='sten'
str4=str3+'waves'
print(str4 is 'stenwaves')#run_time
输出:True
False
>>> a="a*&&"
>>> b="a*&&"
>>> a is b
False
>>> import sys
>>> a=sys.intern(b)
>>> a is b
True
格式化输出 Formatted Output
1.Formatting with
- % Operator
print('The value of pi is: %5.4f' % 3.141592)
#5表示总宽度(包括小数点和小数点后的数字),整数部分的 3 会直接显示,而不会占用宽度。4表示小数点后保留4位数字,f 表示浮点数
print('Floating point numbers: %1.0f' % 13.144)
#由于总宽度不足以显示整数部分的 13,实际上会忽略宽度限制,整数部分会完全显示
输出:The value of pi is: 3.1416
Floating point numbers: 13
- format() string method
'String here {} then also {}'.format('something1','something2')
Syntax: {[index]:[width][.precision][type]}
▪ d → integers
▪ f → floating-point numbers
▪ b → binary numbers
▪ o → octal numbers
▪ x → octal hexadecimal numbers
▪ s → string
▪ e → floating-point in an exponent format
- string literals, called f-strings
name="Ele"
print(f"My name is {name}.")
print(f"He said his age is {(lambda x: x * 2)(3)}")
匿名函数(lambda函数)的调用
# Float precision in the f-String method:
# Syntax: {value:{width}.{precision}}
num = 3.14159
#不要四舍五入→.5f或者%格式化输出
print(f"The value of pi is: {num:{1}.{5}}")
输出:My name is Ele.
He said his age is 6
The value of pi is: 3.1416
- String Template Class字符串模板类