【Python学习查缺补漏】| Python基础

编译与解释

执行方式释义使用语言
编译将源代码转化成目标代码的过程。执行编译的计算机程序称为编译器。静态语言
解释将源代码逐条转换成目标代码同时逐条运行目标代码的过程。执行解释的计算机程序称为解释器。优点是可以多平台使用。脚本(Script)语言

解释器跨平台使用

IPO程序编写方法

  • 输入数据:如文件输入、网络输入、控制台输入、交互界面输入、随机数据输入、内部参数输入等。
  • 处理数据:程序对输入数据进行计算产生输出结果的过程。计算问题的处理方法统称为算法,它是程序最重要的组成部分。
  • 输出数据:如控制台输出、图形输出、文件输出、网络输出、操作系统内部变量输出等。

语法元素分析

包括格式框架、注释、变量、表达式、分支语句、循环语句、函数等。

格式框架
  • 缩进(一行代码开始前的空白区域)表示代码的包含和层次关系,通常1缩进=1Tab或4Space。
  • 同一行多条语句:语句间用分号;分割。
  • 一条语句多行:
    • 在一行的结尾处放置一个继续符号\。
    • 用一对括号框起来的对象(包括数据结构和调用内容),可以在逗号,处(前/后)换行。
  • 注释:代码中加入的说明信息,不被执行。分单行注释#和多行注释’’'或"""(多行注释相当于字符串)。
# 输出函数内的注释内容
def f():
	'''这是文档注释'''
	pass
print(f.__doc__)
标识符

用于命名对象,如各种数据类型的实例、函数、类等。

  • 标识符命名的合法规则:只由字母数字下划线组成(python3可以使用中文字符);不以数字开头;不能使用关键字;对大小写敏感。避免使用python内存函数名。字符串可用方法isidentifier()判断是否为合法标识符。
    • 关键字/保留字:保留字一般用来构成程序整体框架、表达关键值和具有结构性的复杂语义等,所以不能定义与保留字相同的标识符。
  • 标识符约定命名规则:由具有意义的多个单词组成,除第二个及以后的单词首字母大写,其他均小写;类名首字母大写;常量名全部字母大写。
>>> help('keywords')
# Here is a list of the Python keywords.  Enter any keyword to get more help.
False               class               from                or
None                continue            global              pass
True                def                 if                  raise
and                 del                 import              return
as                  elif                in                  try
assert              else                is                  while
async               except              lambda              with
await               finally             nonlocal            yield
break               for                 not                 
变量和内部存储规则
  • 变量应当做标识符理解。有区别其他语言的特性:
    • 变量类型不需要显式声明,但解释器会根据操作自动推断数据类型。
    • 变量类型是动态的,可以随时变化。
    • 允许多个变量指向同一地址的对象。
  • 导致上述特性的内部存储原因是:Python为常量/对象开空间赋地址,标识符指向该地址,复指该地址对应的对象。所以“修改变量的值”实际上是“先为新值开空间,再修改标识符指向的内存地址(引用)”。
  • Python是基于内存管理模式,具有自动内存管理功能,没有任何变量指向的值会被自动删除。当然为了避免频繁地申请与销毁内存空间也有存储优化(与解释器环境严重相关,IDLE基本符合规律,Thonny维护的范围似乎更大):
    • 小整数对象池: Z ∈ [ − 5 , 256 ] \Z\in[-5,256] Z[5,256],这些整数对象被提前建立好,不会被垃圾回收。
    • intern机制(字符串驻留):一般来说,长度 ≤ 20 \le 20 20且只由字母数字下划线组成的字符串会被加入字符串储蓄池维护(字典树维护)。
    • 特别的,字符串拼接中若涉及变量的拼接,intern机制不生效。
# IDLE环境中,关于存储地址
>>> id(1000)
2571025206928 #是整型的实例,对象本身被存储
>>> a=1000
>>> id(a)
2571025207024
# IDLE环境中,关于intern机制
>>> a='abc'
>>> a is 'abc'
True
>>> a+='d'
>>> a is 'abcd'
False
>>> 'abc'+'d' is 'abcd'
True

turtle模块

查看Python说明文档“海龟绘图”

基本数值类型

Python内置对象 { 数 值 类 型 : int, float, complex 序 列 类 型 : str, list, tuple, dict, set 编 程 单 元 : 函数(def定义),类(class定义) 其 他 类 型 : bool, 空类型None, 文件类型 \text{Python内置对象}\begin{cases} 数值类型:\text{int, float, complex}\\ 序列类型:\text{str, list, tuple, dict, set}\\ 编程单元:\text{函数(def定义),类(class定义)}\\ 其他类型:\text{bool, 空类型None, 文件类型} \end{cases} Python内置对象int, float, complexstr, list, tuple, dict, set函数(def定义),类(class定义)bool, 空类型None, 文件类型

  • 整型int
    • 可以计算、存储任意大的数值,不用担心溢出。
  • 浮点型float
    • 取值范围与精度(17位)都有限制。
      • 需要舍弃部分精度时会采用科学计数法表示。
      • 基本的浮点数运算也会有误差,受计算机用二进制存储数据的影响。
>>> 0.1+0.3
0.4
>>> 0.1+0.2
0.30000000000000004
>>> round(0.1+0.2,2)==0.3 # 用round()取整函数消除影响
True
>>> round(0.25,1)
0.2 # 所有系统提供的四舍五入操作均有该问题
	# 否则采用int(n*(10**d)+0.5)/(10**d)获得正确的数值
>>> 3.2%2
1.2000000000000002
  • 复数型complex
    • 形式满足 z = a + b j z=a+bj z=a+bjz.real返回浮点型实部,z.imag返回浮点型虚部,z.conjugate()方法返回共轭复数。
  • fractions模块的Fraction类支持分数运算。
>>> a=Fraction(3,5)
>>> b=Fraction(3,7)
>>> a+b
Fraction(36, 35) # 支持通分
>>> a*3
Fraction(9, 5) # 支持分数与数字的跨类型运算
  • 支持在数字中间位置使用单个下划线作为分隔来提高数字的可读性,类似于数学上使用逗号作为千位分隔符。1_000_000=1000000
数值运算操作符

全部运算操作符及优先级顺序参考DFGp22。特别注意成员测试运算符innot in,对象实体同一性测试(地址)运算符isis not

  • 运算中类型“宽度”(指倾向性):int<float<complex
  • 整数之间的操作符运算是否为浮点数和复数,根据数学意义上的结果确定;浮点型参与的操作符运算至少是浮点型。
  • 取模%操作,模数和被模数都可以是浮点型。其中 a % b ( b < 0 ) = − [ ( − a ) % ( − b ) ( > 0 ) ] a\%b(b<0)=-[(-a)\%(-b)(>0)] a%b(b<0)=[(a)%(b)(>0)]
  • 结合性**和单目运算符从右向左结合,其他从左向右结合。
内置数值运算函数

常见内置函数参考DFGp15-17,查看全部内置函数和内置对象dir(__builtins__)

  • abs(x)也返回复数x的模。
  • divmod(x,y)返回(x//y,x%y)的二元组。
  • pow(x,y[,z]) ⇔ \Leftrightarrow (x**y)%z,支持复数(math库的pow不支持)。
  • round(x[,ndigits])返回四舍五入 { int ( round ( x , 0 ) ) default 小 数 点 后 n 位 ndigits > 0 小 数 点 前 − n 位 ndigits ≤ 0 \begin{cases}\text{int}(\text{round}(x,0))&\text{default}\\ 小数点后n位&\text{ndigits}>0\\ 小数点前-n位& \text{ndigits}\le 0\\\end{cases} int(round(x,0))nndefaultndigits>0ndigits0
    • round()函数还会自行舍去小数末尾多余的0
  • 最大最小值函数有max/min(arg1, arg2, *args, *[, key=func])的使用方法。
  • 数值类型的强制类型转化int(x), float(x), complex(re[,im])
    • 字符串转化成数值类型中,im不可以是字符串。
    • 均可以往宽度更大的方向转化,且不会改变实际值;complex不能转化成int和float,float转化成int是向下取整。
math模块

math库不支持复数类型!
from math import * { 数 学 常 数 : e, pi, inf, nan 数 值 表 示 函 数 : 16 个 幂 对 数 函 数 : 8 个 三 角 双 曲 函 数 : 16 个 高 等 函 数 : 4 个 \text{from math import *}\begin{cases} 数学常数:\text{e, pi, inf, nan}\\ 数值表示函数:16个\\ 幂对数函数:8个\\ 三角双曲函数:16个\\ 高等函数:4个\\ \end{cases} from math import *e, pi, inf, nan168164

布尔型bool
  • 表达式:可计算代码片段,由常量、变量和运算符或函数按规则构成,返回运算结果。

由表达式/操作数(包括各种非数值类型)和(关系、逻辑)运算符组成的合法布尔式,具有确定的布尔值TrueFalse。(私定义布尔式可以包含逻辑运算符and, or,表达式不可)

  • 关系运算符可以连等1<5>3合法。
  • 表达式满足原则“非0为真”,如0, "", [], None的布尔值都为假False,其他为真。
  • 数值类型与字符串型之间不可比较;字符串型比较遵循“ASCii+字典序”的原则。
  • 逻辑运算符and, or满足“短路原则”,即在能确定布尔式值的表达式处停下,返回这个表达式的值(如果本身并不属于布尔型,则返回原表达式)。所以后续表达式如果语法正确但有错,是不会被检测到的。
>>> 3<5 and a>1
NameError: name 'a' is not defined
>>> 3<5 or a>1
True
>>> not 3<5 and a>1
False
>>> [] or (1 or 5<3) #此时括号不干扰逻辑量
1

部分内置函数

常见内置函数参考DFGp15-17,查看全部内置函数和内置对象dir(__builtins__)

  • help(), dir()用来查找对象的说明文档。
  • type(x), isinstance(obj, class_or_tuple)用来判断数据类型。
  • int(x), float(x), complex(re[,im]), bool(x)简单数值类型和布尔型的强制转换函数。
  • str(x), list(iter), tuple(iter), set(iter), dict(...)复杂的工厂函数。
  • bin(x), oct(x), hex(x)十进制转二/八/十六进制字符串。
  • ord(c)查看Unicode码,chr(unicode)返回Unicode码对应字母。

人机交互接口

  • input(prompt=None)
    • 用户输入的内容均作为字符串对待。
    • split(sep=None, maxsplit=-1)方法对sep的情况讨论:
      • sep缺省时,从空白符(如' ', '\n', '\r'等)中取出连续的元素,返回列表。取不出元素返回空列表。
      • sep有值时(不可以是空字符串),按照sep严格分割,首尾也考虑,返回列表。分不开元素返回只含原字符串的列表。
  • print(*objects, sep=' ', end='\n', file=sys.stdout)
  • sys模块中sys.stdin.read(limit=-1)sys.stdin.readline(limit=-1)用于从键盘读取指定数量的字符(与文件中的read系列方法区分)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值