python基础学习之计算和控制流

控制流

(一)控制流程

  1. 在计算机运行过程中,”下一条语句“决定了计算机是能够自动调整、自动反复操作,还是只能像计算器那样一步接着一步计算。
  2. 这种决定”下一条语句“的机制,在程序设计语言中称作——控制流程

(二)三种结构

Python语言中的控制流程

  1. 顺序结构:按照语句队列前后顺序来确定下一条将要执行的语句
  2. 条件分支结构:根据当前情况来选择下一条语句的位置
  3. 循环结构:周而复始地执行一系列语句
    注意:几乎所有的程序设计语言都提供了三种控制流程

条件分支语句(if)

基本要素

  1. 预设的判断条件
  2. 达成条件后执行的语句

扩展要素

  1. 当条件不满足时执行的语句
  2. 多条件时哪个满足执行哪个的条件
if <逻辑表达式>:
	<语句块1>
	……
else:
	<语句块2>
  1. if和else都是“保留字” (即不能当作变量和函数名)
  2. “逻辑表达式”是指所有运算的结果为逻辑类型(True或False)的表达式
  3. “语句块”就是条件满足后执行的一组语句
  4. 冒号表示语句层次(即下一行要缩进)
  5. 语句块缩进

注意:各种类型中某些值会自动被转换为False,其它值则是True:None, 0, 0.0, ‘’, [], (), {}, set(),即空字符、空列表、空元组、空字典、空集合均为False。

if <逻辑表达式1>:
	<语句块1>
elif <逻辑表达式2>:
	<语句块2>
elif <逻辑表达式3>:
	<语句块3>
… …
else:
	<语句块n>

多种情况的条件语句,用if—elif结构,会更加简洁,层次更加清楚
注意:elif后面没有冒号

条件循环结构(while)

根据需要对一系列操作进行设定次数或者设定条件的重复,这样的控制流程,就称作循环结构

  1. 能持续对大量数据进行处理
  2. 在长时间里对一些未知状况进行连续监测循环结构

基本要素:
循环前提和执行语句

  1. 在执行这组语句之前,计算机会检查循环前提是否存在,只要存在,就会反复执行这组语句,直到循环前提消失

循环前提的类型:

  1. 从某个容器或者潜在的数据集中,逐一获取数据项,什么时候取不到数据项了,循环前提就失效—— for <数据项> in <数据集>
  2. 只要逻辑表达式计算结构为真(True),循环的前提就存在,什么时候逻辑表达式计算结果为假(False),循环的前提就失效—— while 循环结构

注意:与条件分支结构的区别
循环结构会多次检查循环前提

扩展要素:

  1. 当循环前提消失,停止执行这组语句的时候,执行一次另一组语句
# 条件循环表达式
while <逻辑表达式>:
	<语句块>
	break #跳出循环 用break不会执行else后面的语句块 直接跳到while后面的语句块
	continue #略过余下循环语句 继续上面while的循环
	<语句块>
else: #条件不满足退出循环,则执行
	<语句块>
  1. while、else:保留字
  2. 逻辑表达式:指所有运算的结果为逻辑类型(True或False)的表达式
  3. 语句块:一组语句

嵌套循环:
双重甚至多重循环

for i in range(1,10000):
    n = i
    step = 0
    while n != 1:
        if n % 2 == 0:
            n = n // 2
        else:
            n = n * 3 + 1
            step += 1
    else:
        print(i,"traped!", step, "steps")
  1. 中断程序运行:CTRL+C
  2. 通过修改程序中range函数的参数,还可以验证其它范围的连续整数

迭代循环(for)

Python语言中的 for 语句实现了循环结构的第一种循环前提
从某个容器或者潜在的数据集中,逐一获取数据项,什么时候取不到数据项了,循环前提就失效—— for <数据项> in <数据集>

for <循环变量> in <可迭代对象>:
	<语句块1>
	break #跳出循环
	continue #略过余下循环语句
else: #迭代完毕,则执行
	<语句块2>

for循环语法:

  1. for、in和else都是“保留字”
  2. 可迭代对象表示从这个数据对象中可以逐个取出数据项赋值给“循环变量”
  3. 可迭代对象有很多类型,如字符串、列表、元组、字典、集合等,也可以有后面提到的生成器、迭代器等

range函数:
range(<终点>)

  1. 返回一个从0开始到终点的数列
    range(<起点>,<终点>)(左开右闭)(起点,终点-1)
  2. 从0以外的任何整数开始构建数列
    range(<起点>,<终点>,<步长>)
  3. 修改数列的步长,通过将步长设置为负数能够实现反向数列
    range构建的数列,包含起点整数,而不包含终点整数

range类型的对象:

  1. 直接当做序列
  2. 转换为list或者tuple等容器类型
list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list(range(5,10))
[5, 6, 7, 8, 9]
list(range(5,10,2))
[5, 7, 9]
list(range(10,1,-2))
[10, 8, 6, 4, 2]
range(10)
range(0, 10)
tuple(range(10))
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

continue语句和break语句:

  1. 都只能在循环内部使用
  2. 均作用于离它们最近的一层循环
  3. break是跳出当前循环并结束本层循环
  4. continue是略过余下循环语句并接着下一次循环
    请添加图片描述

(三)计算的“容器”:一个类比

简单类型与容器类型

  1. 简单类型——是实体对象
  2. 容器类型——是结构将实体对象进行各种组织和编排
    在这里插入图片描述
    计算语句和结构语句
  3. 就像简单类型和容器类型之间的关系
  4. 用顺序、条件分支和循环结构,来对各个赋值语句进行编排,最终成为解决问题的程序

代码组织:函数

一、代码组织:函数(def)

(一)封装一个功能

  1. 封装
    容器是对数据的封装
    函数是对语句的封装
    类是对方法和属性的封装
  2. 函数(function)
    程序中实现明确功能的代码段可以封装成一个函数,以便复用(reuse)

(二)定义与调用函数

  1. 定义函数
    ① 用def语句创建一个函数
    ② 用return关键字指定函数返回的值
def <函数名> (<参数表>):
	<缩进的代码段>
	return <函数返回值>
  1. 调用函数
<函数名>(<参数>)

注意括号!
无返回值:<函数名>(<参数表>)
返回值赋值:v = <函数名>(<参数表>)

(三)变量的作用域

  1. 局部变量(Local Variable)
    在函数内部定义的参数以及变量只在该函数定义范围内有效,函数外边无法访问到
  2. 全局变量(Global Variable)
    在函数外部定义的,作用域是整个代码段
  3. global关键字
    ① 可以在一个函数内部得到某个全局变量的值,但是无法进行修改,Python会在函数内部创建一个同名的局部变量
    ② 使用global关键字可以在函数中改变全局变量的值
num1,num2 = 1,2
def addNum():
    num1,num2 = 2,3
    return(num1 + num2)
addNum()
5
num1,num2  # 调用的是函数外的值
(1, 2)
num1,num2 = 1,2
def addNum():
    global num1,num2
    num1,num2 = 2,3
    return(num1+num2)
addNum()
5
num1,num2  # global赋值调用的事函数内的值
(2, 3)

(四)函数小技巧

map() 函数

有时需要对列表中每个元素做一个相同的处理,得到新列表
例如:所有数据乘以3
所有字符串转换为整数
两个列表对应值相加
2. map(func, list1, list2….)
函数func有几个参数,后面跟几个列表

num = [10,20,40,80,160]
lst = [2,4,6,8,10]
def mul3(a):
    return a * 3
    
print (list(map(mul3,num)))

def atob(a,b):
    return a + 1.0/b

print(list(map(atob,num.lst)))

[30,60,120,240,480]
[10.5,20.25,40.166666666666664,80.125,160.1]
匿名函数lambda
  1. 有时函数只用一次,其名称也就不重要,可以无需费神去def一个
  2. lambda表达式
    返回一个匿名函数
    lambda <参数表>:<表达式>
num = [10,20,40,80,160]
lst = [2,4,6,8,10]
def mul3(a):
    return a * 3
    
print (list(map(mul3,num)))

def atob(a,b):
    return a + 1.0/b

print(list(map(atob,num.lst)))

print(list(map(lambda a:a * 3,num)))
print(list(map(lambda a,b:a+1.0/b,num,lst)))

二、代码组织:函数的参数

(一)形式参数与实际参数

  1. 参数:传入到函数的值
    当调用含参数的函数时,这些参数的值会被复制给函数中的对应参数
  2. 形式参数(parameter)
    函数创建和定义过程中,函数名后面括号里的参数
  3. 实际参数(argument)
    函数在调用过程中传入的参数
  4. 形式参数只是代表一个位置、一个变量名
  5. 实际参数是一个具体内容,赋值到变量的值
def add(a,b):
    return a + b   # 形式参数
add(1,2)   # 实际参数
3

(二)定义函数的参数

  1. 定义函数时,参数可以有两种
  2. 一种是在参数表中写明参数名key的参数,固定了顺序和数量的固定参数
    def func(key1, key2, key3…):
    def func(key1, key2=value2…):
  3. 一种是定义时还不知道会有多少参数传入的可变参数
    *def func(*args): #不带key的多个参数
    def func(*kwargs): #key=val形式的多个参数(注意星号)

(三)固定参数与可变参数

注意:% 是格式化字符串,表示 将% 后面括号里的参数按格式放入到前面的字符串中

固定参数:
在这里插入图片描述

可变参数:
在这里插入图片描述
在这里插入图片描述

(四)调用函数的参数

  1. 调用函数的时候,可以传进两种参数
  2. 一种是没有名字的位置参数
    func(arg1, arg2, arg3…)
    会按照前后顺序对应到函数参数传入
  3. 一种是带key的关键字参数
    func(key1=arg1, key2=arg2…)
    由于指定了key,可以不按照顺序对应
  4. 如果混用,所有位置参数必须在前,关键字参数必须在后

引用拓展模块

(一)调用模块化的工具

  1. 模块就是程序
    ① 每个扩展名为.py的Python程序都是一个独立的模块(Module)
    ② 模块能定义函数、类和变量,让你能够有逻辑地组织你的Python代码段
  2. 组织模块
    包(package)是放在一个文件夹里的模块集合
  3. 模块引用方式
	import <模块> [as <别名>]

将模块中的函数等名称导入当前程序,在调用模块中的函数的时候,需要加上模块的命名空间,可以给导入的命名空间替换一个新的名字
引用方法:<模块>.<名称>

	from <模块> import <函数>

引入模块中的某个函数,调用时不需要再加上命名空间

(二)Python语言标准库

  1. 标准库
    在安装Python时就默认已经安装好的模块,Python具有功能强大的标准库
2. 数字和数学模块

numbers:数字抽象基类
math:数学函数
cmath:复数的数学函数
decimal:十进制定点和浮点算术
fractions:有理数
random:生成伪随机数
statistics:数学统计功能

3. 数据类型

datetime:基本日期和时间类型
calendar:与日历相关的一般功能
collections:容器数据类型
heapq:堆队列算法
bisect:数组二分算法
array:高效的数值数组
weakref:弱引用
types:动态类型创建和内置类型的名称
copy:浅层和深层复制操作
pprint:格式化输出
reprlib:备用repr()实现
enum :支持枚举

4.功能编程模块

itertools:为高效循环创建迭代器的函数
functools:可调用对象的高阶函数和操作
operator:标准运算符作为函数

5.数据持久化

pickle:Python对象序列化
copyreg:注册pickle支持功能
shelve:Python对象持久化
marshal:内部Python对象序列化
dbm:与Unix“数据库”的接口
sqlite3:SQLite数据库的DB-API 2.0接口

6.数据压缩和存档

zlib:与gzip兼容的压缩
gzip/bz2:支持gzip/bzip2文件
lzma:使用LZMA算法进行压缩
zipfile:使用ZIP存档
tarfile:读取和写入tar归档文件

7.文件格式

csv:CSV文件读写
configparser:配置文件解析器
netrc:netrc文件处理
xdrlib:对XDR数据进行编码和解码
plistlib:生成并解析Mac OS X.plist文件

8.文件和目录访问

pathlib:面向对象的文件系统路径
os.path:常见的路径名操作
fileinput:迭代多个输入流中的行
stat:解释stat()结果
filecmp:文件和目录比较
tempfile:生成临时文件和目录
glob:Unix样式路径名模式扩展
fnmatch:Unix文件名模式匹配
linecache:随机访问文本行
shutil:高级文件操作
macpath:Mac OS 9路径操作函数

9.通用操作系统服务

os:其他操作系统接口
io:用于处理流的核心工具
time:时间访问和转换
argparse:用于命令行选项,参数和子命令的解析器
getopt:用于命令行选项的C风格解析器
logging:Python的日志记录工具
getpass:便携式密码输入
curses:字符单元格显示的终端处理
platform:访问底层平台的标识数据
errno:标准errno系统符号
ctypes:Python的外部函数库

10.并发执行

threading:基于线程的并行性
multiprocessing:基于进程的并行性
concurrent.futures:启动并行任务
subprocess:子流程管理
sched:事件调度程序
queue:同步的队列类
_thread:低级线程API

11.加密服务

hashlib:安全哈希和消息摘要算法接口
hmac:用于消息身份验证的密钥哈希算法
secrets:生成用于管理机密的安全随机数

12.网络和进程间通信

asyncio:异步I/O
socket:低级网络接口
ssl:套接字对象的TLS/SSL包装器
select:等待I/O完成
selectors:高级I/O复用
asyncore:异步套接字处理程序
asynchat:异步套接字命令/响应处理程序
signal:设置异步事件的处理程序
mmap:内存映射文件支持

13.互联网数据处理

email:电子邮件和MIME处理包
json:JSON编码器和解码器
mailcap:Mailcap文件处理
mailbox:以各种格式处理邮箱
mimetypes:将文件名映射到MIME类型
base64:Base16/Base32/Base64/Base85数据编码
binhex:对binhex4文件进行编码和解码
binascii:在二进制和ASCII之间转换
quopri:对MIME引用的可打印数据进行编码和解码
uu:对uuencode文件进行编码和解码

14.互联网协议和支持

webbrowser:Web浏览器控制器
cgi:通用网关接口支持
cgitb:CGI脚本的回溯管理器
wsgiref:WSGI实用程序和参考实现
urllib:URL处理模块
http:HTTP模块
ftplib/poplib/imaplib/nntplib/smtplib:
FTP/POP3/IMAP4/NNTP/SMTP协议客户端
smtpd:SMTP服务器
telnetlib:Telnet客户端
socketserver:网络服务器的框架
xmlrpc:XMLRPC服务器和客户端模块
ipaddress:IPv4/IPv6操作库

15.多媒体服务

audioop:处理原始音频数据
aifc:读写AIFF和AIFC文件
sunau:读取和写入Sun AU文件
wave:读写WAV文件
chunk:读取IFF分块数据
colorsys:颜色系统之间的转换
imghdr:确定图像的类型
sndhdr:确定声音文件的类型
ossaudiodev:访问兼容OSS的音频设备

16.结构化标记处理工具

html:超文本标记语言支持
xml:XML处理模块

17.程序框架

turtle — 海龟作图库
cmd —支持面向行的命令解释器
shlex —简单的词法分析

18.图形用户界面

tkinter:Tcl/Tk的Python接口

(三)拓展命名空间

  1. 命名空间
    ① 表示标识符(identifier)的可见范围
    ② 一个标识符可以在多个命名空间中定义,在不同命名空间中的含义互不相干
dir(<名称>)函数:列出名称的属性
help(<名称>)函数:显示参考手册
import time
dir(time)
['CLOCK_MONOTONIC', 'CLOCK_MONOTONIC_RAW', 'CLOCK_PROCESS_CPUTIME_ID', 'CLOCK_REALTIME', 'CLOCK_THREAD_CPUTIME_ID', 'CLOCK_UPTIME_RAW', '_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock_getres', 'clock_gettime', 'clock_gettime_ns', 'clock_settime', 'clock_settime_ns', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname', 'tzset']
time.tzname   # 返回了一个时区
('CST', 'CST')
help(time.time)
Help on built-in function time in module time:

time(...)
    time() -> floating point number
    
    Return the current time in seconds since the Epoch.
    Fractions of a second may be present if the system clock provides them.

print(time.time())
1658238077.049102
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值