jk's notes
  • 使用 Jupyter 学习 Python

使用 Jupyter 学习 Python

3.1 Python 概述

作者这里算是对编程语言进行 0 基础介绍, 然后一步步介绍. 这里略去大部分.

首先介绍了高级语言, 低级语言.

然后介绍了 Python 代码演示, 其中包括

  • 导入 random 模块.
  • 生成随机数 (random.randint).
  • input('...') 提示并由用户输入, 结果为字符串.
  • int() 将字符串转换为整数.
  • while 循环, True 布尔值, if...elif...else 判断, break 跳出循环.
  • print 输出, %d 作为数字格式.

注意 Python 是大小写敏感的. Python 使用缩进进行分块代码.

然后介绍 Python 的交互式环境 (控制台)

image-20240226164616207

然后介绍 ipython 交互环境

image-20240226165113130

然后介绍 .py 脚本文件, 然后使用 python 文件.py 来执行脚本.

最后介绍了 Spyder 集成开发环境.

image-20240226165516802

3.2 Python 语法速览

3.3 变量与对象

python 中变量直接使用, 不用提前声明. 赋值即可使用.

python 是弱类型的.

type() 可以查看类型.

然后介绍基本数据类型. 包括复数类型, 字符串类型及常用方法

类型类型名示例
int整型x = 1
float浮点型x = 1.2
complex复数x = i + 2j
bool布尔类型x = True
str字符串类型x = 'Hello'
NoneType空值x = None

.zfill() 方法会在左侧填充 0 来获得指定长度字符串

python 中使用 None 表示空值.

常用的整型运算符: +, -, *, /, ** (乘幂), // (整除), %

image-20240227104921566

虚数符号用 j 表示. 复数可以写成: 1 + 2j 或 complex(1, 2).

操作示例
取实部c.real
取虚部c.imag
求共轭复数c.conjugate()
求复数的模abs(c)

字符串可以使用单引号, 也可以使用双引号, 以及三单引号 (支持换行).

常用字符串方法

方法或函数说明
len(str)获得字符串长度.
str.upper()将字符串全部转大写.
str.lower()将字符串全部转小写.
str.capitalize()多单词 首字母大写.
str1 + str2字符串连接.
str * 3重复字符串.
str.strip()移除首尾空格.
str.lstrip()/str.rstrip()移除首/尾空格.
str.center(len)两端补全空格, 使字符串居中.
str.ljust(len)左边补全空格.
str.rjust(len)右边补全空格.
str.zfill(len)左边补全 0.
str.find(str)查找字符串, 未找到则返回 -1.
str.index(str)查找字符串, 未找到返回 ValueError 错误.
str.lindex(str)从左开始查询字符串.
str.rindex(str)从右开始查询字符串.
str.replace(s1, s2)替换字符串.

strip(), lstrip(), rstrip() 支持参数, 移除对应的字符.

center(), ljust(), rjust() 支持字符串参数, 来补全用.

3.4 内置数据结构

列表 (list), 元组 (tuple), 字典 (dict), 集合 (set) 等.

3.4.1 列表

列表基本概念

list = [2,3,5,7]
len(list) # 返回列表长度
list.append(11) # 追加元素到列表尾部
list = list + [13,17] # 连接列表
list.insert(6,15) # 插入
list.remove(15) # 删除
list.reverse() # 反转列表中元素

索引与切片

list[start:end:step]

start 默认为 0, end 默认为 -1, step 默认为 1. 可以省略.

拷贝列表: list[:]

3.4.2 元组

tuple = (1,2,3,4,5,6,7,8,9,10)

元组中的元素不可修改. 可以使用切换与索引.

3.4.3 字典

dic = { 'key1': 'value1', 'key2': 'value2' }

3.4.4 集合

逻辑上与数学的集合概念一样.

s = { 1, 2, 3, 4, 5, 6 }

集合运算:

运算示例
并集`s1
交集s1 & s2
补集s1 - s2
对称差s1 ^ s2

3.4.5 小结

  • 列表. 有序, 可变, 可有重复元素的数据集合.
  • 元组. 有序, 不可变, 可有重复元素的数据集合.
  • 字典. 无序, 可变, 键不允许重复的键值对集合.
  • 集合. 无序, 无重复的数据集合.

3.5 流程控制

3.5.1 条件判断

if 表达式:
  语句
elif 表达式:
  语句
else:
  语句

3.5.2 while 循环

while 表达式:
  语句

3.5.3 for 循环

for 迭代变量 in 列表:
  语句

range(start, end) 生成左闭右开的范围, 注意它是一个类似于迭代器的数据类型, 不是集合, 但可以支持迭代访问.

可以使用 list() 函数将 range 数据类型转换为列表.

for 循环是进行迭代, 无法访问迭代索引.

print(xxx) 结尾会使用换行, 可以使用 print(xxx, end = ' ') 将结尾换成空格.

3.5.4 break 及 continue 语句

略

3.6 函数

# 定义函数
def 函数名(参数列表):
  函数体
  return 返回值

# 调用函数
函数名(参数)

相关主题

  • 默认参数 arg = <defaultValue>.
  • 不定长参数 *args (列表形式), **kwargs (字典形式).
  • 匿名函数 (Lambda 表达式): fn = lambda a, b: a + b

3.7 模块与包

python 通过模块和包来处理代码个功能复用.

3.7.1 模块与包的基本概念

将复用的函数定义在一个 .py 文件中, 该文件就是一个模块.

使用 from 模块文件名 import * 导入模块中的成员.

导入方式:

  • import 模块名 [as 别名]. 导入模块, 使用模块名作为命名空间.
  • from 模块名 import 成员1, 成员2. 单独导入某个成员.
  • from 模块名 import *, 隐式导入模块内容.

python 使用文件夹组织模块, 这些组织在一起的模块被称为包.

每一个包目录中必须包含一个名为 __init__.py 的文件. 该文件可以为空, 也可以有代码, 如果有代码, 则以报名作为模块名.

书中没有介绍更多细节.

3.7.2 从 Python 标准库导入模块

模块索引文档

import os       # 导入操作系统工具
import math     # 导入数学工具
import random   # 导入随机数生成工具
import datetime # 导入日期和时间
import hashlib  # 导入哈希算法
import urllib   # url 操作库

3.7.3 导入第三方库

第三方包会在 Python 包索引 (Python Package Index) 上注册, 然后使用 pip 来安装.

例如安装 qrcode

image-20240227154523519

pip install qrcode

import qrcode
qr = qrcode.QRCode()
qr.add_data("http://site.jklibs.com")
img = qr.make_image()
img.save('p.png')

3.7.4 包管理器 Anaconda

Anaconda 是基于 Python 的数据处理和科学计算的平台, 内置了常用的第三方库.

除非研究软件架构本身, 如果使用, 建议使用 Anaconda 来安装管理 Python 以及第三方库.

Anaconda 有个人版 (免费), 有团队版, 和企业版.

3.8 面向对象编程

class 类名(父类名):
  def __init__(self, 参数列表):
    self.xxx = vvv
    
  def 方法(self, ...):
    方法体

父类名默认为 object

实例化

variable = 构造函数(初始化参数)

Python 支持多继承

class 类名(父类1, 父类2, ...):
  ...

重写父类方法, 与 JS, OC 等语言的实现一样. 直接同名覆盖.

3.9 输入输出

打开文件语法:

f = open('文件路径', '模式')
...
f.close()

文件模式与 C 语言中文件模式一样: r, w 等. 细节可以参考文档.

可以使用 read(size) 方法读取指定长度的字节数据, 使用 readline() 读取一行数据, readlines() 读取所有行.

Last Updated:
Contributors: jk