Chapter 2 Python 基本知识
2.4 变量转换
基本格式是type(expression)
## 20
## -1124000000.0
## 15.6
## True
## '1111'
## '@'
## b'H\t@'
## ['a', 'b', 'c']
## {3: 'three', 1: 'one'}
## {'one', 'two'}
2.5 容器索引
计算长度
索引从0开始
## 10
## 50
如果要选取一段, 格式是 lst[start slice:end slice:step]
## [10, 20, 30, 40]
## [20, 30, 40]
2.7 Python模块
from monmod import nom1,nom2 as fct # 导入部分模块
# or
import monmod # 导入全部模块
2.7.1 创建属于自己的模块
在Python中,你可以创建自己的模块,以便在不同的项目中重复使用自定义功能或代码。以下是创建Python模块的步骤:
创建一个.py文件:首先,打开文本编辑器(如Notepad++、VS Code、PyCharm等),然后创建一个以.py为扩展名的新文件,例如 mymodule.py。这个文件将包含你的自定义代码。
编写模块代码:在新的.py文件中编写你的Python代码。这可以是函数、类、全局变量等。例如:
# mymodule.py
def greeting(name):
return f"Hello, {name}!"
将模块放在正确的位置:如果你打算在不同的项目中使用这个模块,确保将mymodule.py保存在Python的模块搜索路径之一下,或者将它放在你的项目文件夹中。
导入你的模块:在其他Python脚本中,你可以使用import语句导入你的模块。例如
import mymodule
message = mymodule.greeting("Alice")
print(message)
这将输出 “Hello, Alice!”,这是 mymodule.py 中 greeting 函数的返回结果。
2.9 基础数学函数
Operators: + - * / // % **
## 3.2
## 3.6
## 64
python 中 math 模块包含了常用的数学函数
## 0.7071067811865475
## 9.0
## 13
## 12
其他常用的数学相关的模块还包括: math, statistics, random, decimal, fractions, numpy
2.11 循环
2.11.1 条件循环
基本格式是:
while logical condition:
statements block
循环控制的关键词 continue , break
一个简单的例子
## sim: 101
2.11.2 迭代循环
基本格式是:
for var in sequence:
statements block
2.11.2.1 直接根据字符串遍历
这个sequence 序列 , 可以是一个字符串, 也可以是一个数字列表等等
s = "Today , The Earth become square shape"
cnt = 0
for c in s:
if c=="a":
cnt = cnt + 1
print("found",cnt,"a")
## found 4 a
2.14 关于容器的常用操作 Generic Operations on Containers
len(c)→ items count
min(c) max(c) sum(c)
sorted(c)→ list sorted copy
val in c boolean, membership operator in (absence not in)
enumerate(c)→ iterator on (index, value)
zip(c1,c2…)→ iterator on tuples containing ci,items at same index
all(c)→ True if all c items evaluated to true, else False
any(c)→ True if at least one item of c evaluated true, else False
其他一些常用方法
reversed(c)→ inversed iterator
c*5→ duplicate
c+c2→ concatenate(连接)
c.index(val)→ position
c.count(val)→ events count
复制
import copy
copy.copy(c)→ shallow copy of container
copy.deepcopy(c)→ deep copy of container
2.15 关于列表的操作 list
lst.append(val) add item at end
lst.extend(seq) add sequence of items at end
lst.insert(idx,val) insert item at index
lst.remove(val) remove first item with value val
lst.pop([idx])→value remove & return item at index idx (default last)
lst.sort() lst.reverse() sort / reverse liste in place
2.16 关于字典的操作
d[key]=value # d[key]→ value
d.clear() # del d[key]
d.update(d2) # update/add associations
d.keys()
d.values()
d.items() # iterable views on keys/values/associations
d.pop(key[,default])→ value
d.popitem()→ (key,value)
d.get(key[,default])→ value
d.setdefault(key[,default])→value
2.17 关于集合的操作
一些操作符
- → union (vertical bar char)
& → intersection
- ^ → difference/symmetric diff.
< <= > >= → inclusion relations
其他的一些方法
s.update(s2)
s.copy()
s.add(key)
s.remove(key)
s.discard(key)
s.clear()
s.pop()
2.18 文件
基本格式
f = open("file.txt","w",encoding="utf8")
- 第一个参数是路径
- w 表示写文件, 其他可选包括 ‘r’ read ,‘a’ append
- 编码 : utf8 ascii
2.18.2 读文件
f.read([n]) → next chars , if n not specified, read up to end !
f.readlines([n]) → list of next lines
f.readline() → next line
2.19 函数定义
基本格式是:
def fct(x,y,z):
"""documentation"""
代码
return something/none
参数还可以是字典和元组
def fct(x,y,z,*args,a=3,b=5,**kwargs):
*args 表示tuple 元组
**kwargs 表示字典
函数调用
r = fct(3,i+2,2*i)
2.20 字符串操作
s.startswith(prefix[,start[,end]])
s.endswith(suffix[,start[,end]])
s.strip([chars])
s.count(sub[,start[,end]])
s.partition(sep)→ (before,sep,after)
s.index(sub[,start[,end]])
s.find(sub[,start[,end]])
s.is…() tests on chars categories (ex. s.isalpha())
s.upper() s.lower() s.title() s.swapcase()
s.casefold() s.capitalize() s.center([width,fill])
s.ljust([width,fill]) s.rjust([width,fill]) s.zfill([width])
s.encode(encoding) s.split([sep]) s.join(seq)
2.20.1 字符串格式化
基本格式:
"modele{} {} {}".format(x,y,r)
## 3.14
常用格式:
{:.2f} : 保留小数点后两位
{:+.2f} : 带符号保留小数点后两位
{:-.2f} : 带符号保留小数点后两位
{:.0f} : 不带小数
{:0>2d} : 数字补零 (填充左边, 宽度为2)
{:x<4d} : 数字补x (填充右边, 宽度为4)
{:x<4d} : 数字补x (填充右边, 宽度为4)
{:,} : 以逗号分隔的数字格式
{:.2%} : 百分比格式
{:.2e} : 科学计数法
{:>10d} : 右对齐 (默认, 宽度为10)
{:<10d} : 左对齐 (宽度为10)
{:^10d} : 中间对齐 (宽度为10)
2.21 Python 语法糖
ython语法糖是一种让代码更加简洁易读的语法构造。下面是一些常见的Python语法糖:
- 列表推导式(List Comprehensions):允许你以一行代码创建新的列表,例如:
squares = [x**2 for x in range(10)]
- 生成器表达式(Generator Expressions):与列表推导式类似,但以生成器的形式返回结果,适用于大型数据集。
squares = (x**2 for x in range(10))
- 条件表达式(Ternary Conditional Expression):一行代码中的条件判断,类似于三元运算符。
result = "yes" if condition else "no"
- 多重赋值:在一行代码中同时给多个变量赋值。
a, b = 5, 10
- 扩展的切片(Extended Slices):通过[start:stop:step]语法支持更多的切片操作。
items = [1, 2, 3, 4, 5]
reversed_items = items[::-1]
- with语句(上下文管理器):通过with关键字简化资源管理,如文件操作。
with open('file.txt', 'r') as f:
content = f.read()
- 装饰器(Decorators):允许你修改或包装函数,用于日志、缓存等功能。
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Something is happening before the function is called.")
result = func(*args, **kwargs)
print("Something is happening after the function is called.")
return result
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
- 枚举(Enumerate):在循环中同时获得索引和值。
for index, value in enumerate(my_list):
print(f"Index: {index}, Value: {value}")
- 字典推导式(Dictionary Comprehensions):创建新字典的快速方法。
data = {key: value for key, value in my_list}
- f-strings:用于字符串格式化,支持内插表达式。
name = "Alice"
print(f"Hello, {name}!")
这些语法糖让Python代码更加简洁和易读,使开发者更容易编写高效的代码。
2.22 Python 编程注意事项
当你在编写Python代码时,有一些注意事项可以帮助你避免常见的错误和提高代码的质量:
代码风格:遵循PEP 8,Python的官方风格指南,以保持代码的一致性。使用工具如Pylint或Flake8可以帮助你自动检查代码风格。
命名规范:给变量、函数和类起有意义的名字。变量名使用小写字母,多个单词之间用下划线分隔(snake_case)。类名使用首字母大写的驼峰命名法(CamelCase)。
注释:写清晰、有意义的注释,解释代码的用途和实现细节。避免无谓的注释,注释应该随着代码的更新而更新。
文档字符串:对于函数、类和模块,编写文档字符串(docstring)以解释它们的功能和用法。
异常处理:合理地使用异常处理机制。不要捕获所有异常,而是只捕获你能够处理的异常。并避免使用空的except语句块。
模块化:将代码分解成模块、函数和类,以提高可读性和维护性。不要写一个庞大的、难以理解的代码文件。
虚拟环境:使用虚拟环境来隔离不同项目的依赖关系,以避免版本冲突。
版本控制:使用版本控制系统(如Git)来跟踪代码的变化,以便追溯问题、合并代码和与团队协作。
性能优化:如果你的代码面临性能问题,使用工具(如cProfile)来找出瓶颈,并采用合适的优化策略。
测试:编写单元测试和集成测试,确保代码的正确性。采用测试驱动开发(TDD)的方法有助于提高代码质量。
11 依赖管理:使用依赖管理工具(如pip和requirements.txt)来管理项目的依赖库。
12 安全性:注意防范安全漏洞,如输入验证、跨站脚本攻击(XSS)等。
不要重复造轮子:使用已有的库和模块,避免重复实现已有的功能。
代码复审:请同事或同行进行代码复审,以帮助发现潜在的问题和改进代码。
学习和持续改进:Python是一个不断发展的语言,不断学习新的特性和最佳实践,以提高你的编程技能。
遵循这些注意事项有助于编写高质量、可维护的Python代码,提高工作效率并降低出错的风险。
2.22.1 检查代码风格
Flake8和Pylint是两种用于检查Python代码风格的工具。它们可以自动检查代码是否遵循PEP 8,Python的官方风格指南,以及其他最佳实践。以下是如何使用它们的步骤:
2.22.1.1 使用Flake8:
- 安装Flake8:你可以使用pip安装Flake8。
pip install flake8
进入你的Python项目目录。
在命令行中运行Flake8,并指定要检查的Python文件或目录。例如:
flake8 your_code.py
或者检查整个项目目录:
flake8 your_project_directory
Flake8将列出代码中的风格问题和错误,如果没有问题,将不会输出任何内容。
2.22.1.2 使用Pylint:
- 安装Pylint:你可以使用pip安装Pylint。
pip install pylint
进入你的Python项目目录。
在命令行中运行Pylint,并指定要检查的Python文件或目录。例如:
pylint your_code.py
或者检查整个项目目录:
pylint your_project_directory
- Pylint将为你的代码生成一个分数(得分越高越好),并提供详细的检查报告。它还会列出建议的改进措施,以便你提高代码质量。
通常,Pylint提供了更广泛的代码质量检查和建议,但也可能更严格。Flake8主要用于快速检查代码风格是否符合PEP 8。
在实际工作中,你可以选择使用其中一个工具或两者结合使用,以确保代码的高质量和一致性。逐渐解决工具报告的问题,提高你的代码风格和质量。
2.23 Python 获取帮助
在Python中,你可以获取帮助和文档信息以解决问题和了解特定模块、函数或方法的使用。以下是获取帮助的主要方法:
- help() 函数:
你可以在Python交互式解释器中使用help()函数来获取文档和帮助信息。例如,要获取关于list的帮助信息,你可以输入:
help(list)
这将显示关于list的文档字符串和可用方法的列表。你可以按下q键来退出帮助文档。
- docstrings:
很多Python函数、模块和类都包含有关其用法的文档字符串(docstring)。你可以使用help()函数查看这些文档字符串,或者在代码中使用__doc__属性来访问。
print(list.__doc__)
其他资源包括官方文档, 模块的相关文档