Python基础

Python 基础

Python 简介

Python(蟒蛇)由 Guido(仁慈的独裁者)设计开发,是一种解释型语言,简洁但速度慢。Python 拥有丰富的官方库和第三方库,使得 Python 快速快速流行起来。

  • 优点:高级,OOP;解释型语言;丰富的库;跨平台。
  • 缺点:相对于编译型语言(C/C++,Java 等),速度较慢;代码开源。

Python 解释器

  • CPython:Python 官方解释器,用 C 语言编写。
  • Ipython:基于 Cpython 的一种交互式解释器。
  • JPython:使用 Java 编写的解释器。
  • 其他。

使用which python3命令查看 Python 解释器的安装路径,一般 Python 解释器大小为 4M 左右,很小。

Python2.x 与 Python3.x

Python3.x 是现在主流更新的版本,Python2.7 是官方的最后一个 2.x 版本。在设计 Python3 时,为了避免引入过多累赘,官方不对下兼容。故 Python2.x 和 Python3.x 是不通的,随着时间的发展,应当选择 Python3。

  • Python2.x 不支持中文,默认采用的是 ASCII 编码,而 Python3.x 使用的是 Unicode 编码,支持世界各种语言(可以使用中文变量名)。
  • Python3 没有了long类型,int理论没有大小限制。然而在 Python2 中数值大小有限制。

运行 Python 程序

  • 使用解释器运行,python3 xx.py
  • 直接运行
    • py 文件开头使用 shebang:#! /usr/bin/env python3或者#! /usr/bin/python3
    • 增加执行权限。chmod +x xx.py,然后用命令./xx.py执行之

shebang 符号

shebang 通常在类 Unix 系统脚本中的第一行开头使用,用于指明执行该脚本文件的解释程序路径。

#! /usr/bin/env python3
# coding:utf-8

Python 基础语法

注释

  • 单行注释:# 单行注释
  • 多行注释:3 个单引号或者 3 个双引号括起来。

运算符

  • 算术运算符:+, -, *, **, /, //, %
    • +还可用于容器的合并,-还可用于集合求差集,*还可以用于容器重复。
  • 比较运算符:>, <, >=, <=, ==, !=
    • 与 C/C++、Java 等语言不同,多个比较运算符会按照数学方式求解。例如,1<3>2表示1<3 and 3>2,结果为True
  • 逻辑运算符:and, or, not,均为短路运算符。
  • 赋值运算符:=, +=, -=, *=, **=, /=, //=, %=
  • 位运算符:&, |, ~, ^, >>, <<
    • &、|、^还可用于集合求交集、并集、对称差集。
  • 成员运算符:in, not in
  • 身份运算符:is, not is
    • is用于判断两个变量的引用是否相同。
    • ==用于判断两个变量的值是否相同。

变量

int, float, complex, bool, str, bytes, list, tuple, dict, set共 10 种类型。

  • 数值类型:int, float, complex, bool,其余为非数值类型。
  • 可变类型:list, dict, set,其余为不可变类型。
  • type(x), id(x), isinstance(x, 类型或元组), 类型(x), eval(str), chr(x), ord(x), bin(x), oct(x), hex(x),其中,isinstance()会自动向上转型,type()不会。
  • int(非十进制表示的字符串, 该进制),例如int('0b0011', 2), int('0o7777', 8), int('0xffff', 16)

Python2 中还有long类型,Python3 中只有int类型,int理论没有大小限制。

在 Python 中,变量和数据是分开存储的,数据保存在内存中,变量中保存的是数据在内存中的位置,即变量中记录着数据的地址(引用)。

数值型
  • B('0b0101')、O('0o7675')、D、H('0xffff')。数值型变量可以使用二进制、八进制、十进制(默认)和十六进制表示,其中除了十进制其他为字符串。
  • complexa.real, a.imag
  • 数学函数:import math
  • 随机函数:import random
字符串
  • 转义字符:\\, \', \", \n, \r等
  • Python 中单引号和双引号,甚至三引号都是一样的,都可以表示 str 类型。这是因为 Python 中没有单独的 char 类型,只有长度为 1 的 str 类型。
  • 字符串编码:
    • Unicode编码(2 个字节):Python3 默认使用Unicode编码。
    • ASCII编码(1 个字节):Python2 默认使用ASCII编码。故 Python2 不支持中文。
  • 字符串运算符:+, *, [x], [a:b:c]左闭右开原则, in, not in, r'haha'(原始字符串), %(格式字符串), [::-1](字符串逆序)
  • str 的内建方法:capitalize(), splitlines(), index(chr, begin, end), replace(old, new, max), startswith(str), endswith(str), center(len, '*'), isalpha(), istitle(), isalnum(), isdigit(), isupper(), islower(), isdecimal(), find(str, begin, end), strip(), count(str, begin, end), swapcase(), encode("utf-8"), join(list), title(), lower(), upper(), format(), split(str)
  • 'ABC'b'ABC':虽然二者显示一样,但是前者为str,后者为bytesstr可以通过encode方法编码为bytesbytes可以通过decode方法解码为str。在网络传输或者硬盘存储一般以 bytes 的形式。
    • 'abc'.encode('utf-8'),变成bytes
    • b'abc'.decode('utf-8'),变成str
列表
  • 列表运算符:+, *, [x], [a:b:c], in, not in
  • 列表嵌套:列表的元素可以是另一个列表,由此可以构成二维数组。
  • list 的内建方法:append(x), insert(index, x), extend(list), pop(序号,默认为-1), remove(x), clear(), count(x), index(x), reverse(), sort(), copy()
元组
  • 创建只有一个元素的元组必须在元素后面加一个逗号,避免误认为括号。
  • 元组除了无法修改元素以外和 list 功能一样。
  • 元组的自动拆包和封装,a, b = b, a
  • tuple 的内建方法:count(), index()
字典
  • a = {'name':'Bob', 'age':12}
  • dict 的内建方法:a[key], update(), pop(key), clear(), get(), items(), keys(), values()
集合
  • 集合中的元素不重复,利用这个将其他类型强制转换成set()可以排除重复元素。
  • 集合运算符:&, |, -, ^
  • set 的内建方法:add(), update(), remove(), discard(), clear()
容器的公共特性及高级特性
  • 内建函数:len(), del(), max(), min(), sum()
  • 运算符:+, *, in, not in, 比较运算符
  • 迭代:
    • 在 dict 中:for k,v in dict.items()
    • 在 list 中:for i,v in enumerate(l)
  • 切片:list, tuple, str[star:end:step]
  • 列表生成式:
a = [x*x for x in range(1,11)]
b = [m+n for m in 'ABC' for n in 'XYZ']
c = [d for d in os.listdir()]
d = [x+2 for x in range(100) if x%2 == 0]
e = [[1,2], [3,4], [5,6]]
f = [x for i in e for x in i]

输入和输出

  • 输入:input('提示语'),返回值均为str,一般需要进行强制类型转换。
  • 输出:
    • 普通输出:print(a, b, c[, end=' '])
    • 格式化输出:print(格式化字符串%(值)

关键字

import keyword
print(keyword.kwlist)

三大基本结构

顺序结构
条件结构
  • 类型 1
if condition1:
    pass
elif condition2:
    pass
else:
    pass
  • 类型 2
语句1 if condition else 语句2
print('haha') if a>0 else print('hehe')
b = 1 if a>0 else 0

False:0,空字符串,空容器,None。True:非 0, 非空字符串, 非空容器, 非 None。

循环结构
  • 类型 1
while condition:
    pass
else:
    pass
  • 类型 2
for v in seq:
    pass
else:
    pass
  • 类型 3
循环体:
    break
    continue

else 可以省略,else 中的语句只有在循环顺利结束才会执行,如果是 break 造成的跳出循环则不执行。

pass 语句即空语句,一般用来占位符。

内建函数

abs(), bin(), oct(), hex(), dir(), eval(), map(), filter(), sorted(), reversed(), int(), float(), complex(), bool(), str(), bytes(), list(), tuple(), dict(), id(), type(), isinstance(), input(), print(), help(), len(), max(), min(), sum(), pow(), divmod(), round(), range(), open(), zip(), enumerate(), hash(), next(), property(), chr(), ord(), hasattr(), setattr(), delattr(), getattr()

  • 可以使用dir(__builtins__)查看所有的内建函数。
  • dir():输出对象的所有属性和方法。
  • 不要滥用eval()函数。
input_str = input('请输入计算题:')
print(eval(input_str))

__import__('os').system('ls') # 执行终端命令
__import__('os').system('touch aaa.py')
  • map(), filter(), sorted(), 均为高阶函数。
  • isinstance(a, (int, float)), 函数可以判断多个类型其中的一个。
  • range()在 Python3 中返回的是一个迭代器,在 Python2 中返回的是一个元组。返回一个迭代器速度快并且省空间。
  • hash()接受一个不可变参数,返回一个整数。这个整数是该参数的特征码(指纹)。

深拷贝与浅拷贝

  • 直接赋值:传递对象的引而已。二者的 id 相同。
  • copy():浅拷贝。只拷贝父对象,不拷贝子对象,子对象仍然是引用
  • deepcopy():深拷贝。既拷贝父对象,又拷贝子对象
  • 列表的切片d[a:b]是浅拷贝。
  • 列表乘法是浅拷贝。

当单个对象为不可变类型时,copydeepcopy都是引用。
当父对象是不可变的,子对象中有一个可变对象时,deepcopy 是深拷贝,然而 copy 还是引用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值