当前位置: 首页 > news >正文

Python 学习(5) ---- Python 语法规则

目录

      • 迭代器
        • 类的迭代器支持
        • 生成器(Generator)
      • Python Module
        • import 语句
        • from .. import
        • from .. import*
        • 命名空间和作用域
        • python 里的自定义 Packages
      • Python 异常
        • try .. except
        • try/except .. else
        • try-finnally 语句
      • with 语句
        • with 语句工作原理
        • `__name__`

迭代器

迭代器是访问集合元素的一种方式,是一个可以记住遍历的位置的对象
迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束,迭代器只能往前不能后退
迭代器有两个基本方法: iter()next()
字符串,列表和元组对象都可以创建迭代器

迭代器有两个基本遍历方法:

lista = [1, 2, 3, 4, 5]
it = iter(lista)# 使用 while 语句 等到截获异常时结束
while True:try:print(next(it), end="")except StopIteration:print("\nprint list end")break# 直接使用 for 语句进行迭代
itb = iter(lista)
for x in itb:print(x, end="")
print("\n")
类的迭代器支持

把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__()__next__()

__iter__() 方法返回一个特殊的迭代器对象,这个跌代器对实现了 __next__() 方法并通过 StopIteration 异常标志迭代的完成

__next__() 方法会返回下一个迭代器对象

class myNumber:def __iter__(self):self.a = 1return selfdef __next__(self):if self.a < 20:x = self.aself.a += 1return xelse:raise StopIterationmyclass = myNumber()
myiter = iter(myclass)#for x in myiter:
#    print(f" {x}", end="")
while True:try:print(f" {next(myiter)}", end="")except StopIteration:print(f"\nmyNumber iter end")break
生成器(Generator)

Python 中,使用了 yield 的函数被称为生成器(generator)
yield 是一个关键字,用于定义生成器函数,生成器函数是一种特殊的函数,可以在迭代过程中逐步产生值,而不会是一次性返回所有结果 和普通函数不同,生成器函数会返回迭代器,只能用于迭代操作

在生成器中使用 yield 语句时,函数的执行将会暂停,并将 yield 后面的表达式座位当前迭代的值返回

然后,每次调用生成器的 next()方法或使用 for 进行迭代的时,函数会从上次暂停的地方继续执行,直到遇到 yield 语句
这样,生成器函数可以逐步产生值,而不需要一次性计算返回所有结果

调用生成器函数,返回的是一个迭代器对象
TBD

Python Module

Python 模块(module), 是一个 python 文件, 以 py 结尾, 包含了 Python 对象定义和 Python 语句
模块能够更有逻辑的组织你的 python 代码, 模块能够定义函数, 类和变量, 也可以包含可执行代码

import 语句

当解释器遇到 import 语句, 模块在当前的搜索路径就会被导入
搜索路径是一个解释器会先进行搜索的所有目录的列表
一个模块只会被导入一次, 不管你执行了多少次 import, 这样可以防止导入模块被一遍又一遍地执行

from … import

Pythonfrom 语句让你从模块中导入一个指定的部分到当前命名空间中

from modulename import name1,[name2][name3] from lib import fibonacci 

fib 里的 fibonacci 单个引入执行

from … import*

将模块的全部内容都导入到当前的命名空间:

from modulename import *

搜索路径的规则如下:

  1. 当前目录
  2. 如果不在当前目录, python 会搜索 PYTHONPATH 环境变量下的目录
  3. 都找不到, python 会查看默认路径, unix 下一般为 /usr/local/lib/python
命名空间和作用域

一个 python 表达式可以访问局部命名空间和全局命名空间, 如果一个局部变量和一个全局变量重名, 则局部变量会覆盖全局变量

Python 会智能猜测一个变量是局部的还是全局的, 它假设任何在函数内赋值的变量都是局部的, 因此要给函数内的全局变量赋值, 必须使用 global 关键字

global VarName 的表达式会告诉 PythonVarName 是一个全局变量, 这样 Python 就不会在局部命名空间里寻找这个变量了

dir 函数:

globalslocals 函数:

reload 函数:

python 里的自定义 Packages

包是一个分层次的文件目录结构, 它定义了一个由模块及子包, 简单说, 包就是文件夹, 但是该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空, __init__.py 用于标志当前文件夹是一个包

Python 异常

try … except

python 异常可以用 try .. except 语句捕捉
except01

try 语句按照下面的方式进行工作:

  • 首先, 执行 try 子句( 关键字 try 和 关键字 except 之间的语句)
  • 如果没有异常发生,忽略 except 子句, try 子句执行后结束
  • 如果在 try 子句的过程中发生了异常, 那么 try 子句余下的部分会被忽略, 如果异常类型和 except 之后的名称相符
    那么对应的 except 子句将被执行
  • 如果一个异常没有和任何 except 匹配, 那么这个异常将会被传递到上层 try

一个 except 可以处理多个异常, 这些异常将被放在括号里称为一个元组 例如:

try:except(RuntimeError, TypeError, NameError):pass

一个 except 语句可以忽略异常的名称,这意味着它要捕获所有异常,可以使用这种方法打印一个错误信息,再将异常抛出

def exceptDemo():try:f = open("./file.txt")s = f.readline()i = int(s.strip())except OSError as err:print("OS Error: {0}".format(err))except ValueError:print("Value Error: {0}".format(ValueError))except Exception as e:print(f"error:{type(e).__name__} - {e}")print("Unexpected error:", sys.exc_info()[0])print("exiting...")return
try/except … else

try/except 语句后面还有一个可选的 else 语句, 如果使用这个子句, 那么必须放在所有的 except 子句之后
else 子句将在 try 子句没有发生任何异常的时候执行

def exceptElseDemo():try:f = open("./source/example.txt")s = f.readline()i = int(s.strip())except OSError as err:print("OS Error: {0}".format(err))except ValueError:print("Value Error: {0}".format(ValueError))except Exception as e:print(f"error:{type(e).__name__} - {e}")print("Unexpected error:", sys.exc_info()[0])else:print("this in else case")print("exiting...")return
try-finnally 语句

try-finnaly 语句无论是否发生异常都将会执行最后的代码
except03

def exceptElseFinallyDemo():try:f = open("./source/example.txt")s = f.readline()i = int(s.strip())except OSError as err:print("OS Error: {0}".format(err))except ValueError:print("Value Error: {0}".format(ValueError))except Exception as e:print(f"error:{type(e).__name__} - {e}")print("Unexpected error:", sys.exc_info()[0])else:print("this in else case")finally:print("this is in finally demo")print("exiting...")return

except02

with 语句

python 编程中的资源管理是一个重要但是容易被忽视的细节, with 关键字为我们提供了一种优雅的方式处理文件操作,数据库连接等需要明确释放资源的场景

withpython 的一个关键字, 用于上下文协议(Context Management protocol), 简化了资源管理代码,特别是那些需要明确释放和清理的资源(资源,网络连接,数据库连接)

一个常见的情形:

file = open("example.txt", r)
try:content = file.read()
finally:file.close()

这种写法弊端:

  • 容易忘记关闭资源
  • 代码冗长
  • 异常处理复杂

with 关键字的优势

  • 自动资源释放
  • 代码简洁
  • 异常安全
  • 可读性强
with 语句工作原理

上面打开文件的操作改用 with 写法:

with open("python_basic/source/example.txt"'r+') as f:content = f.read()
print(content)

with 是使用 python 的上下文管理协议, 该协议要求对象实现两种方法:

  1. enter(): 进入上下文时调用,返回后赋给 as 后的变量
  2. exit(): 退出上下文调用,处理清理工作

exit() 方法接受三个参数:
exc_type:异常类型
exc_val: 异常值
exc_tb: 移除追踪信息

如果 exit() 返回 true, 表示异常被处理,不会继续传播,返回 False 或者 None, 异常会继续向外传播

with

# 一次性读取整个文件内容 并返回一个字符串
with open("python_basic/source/example.txt", 'r+') as f:content = f.read()
print(content)print("=========================readline================================")
# readline 每次读取一行
with open("python_basic/source/example.txt", 'r') as f:lines = f.readlines()print("lines type is:{0} size:{1}".format(type(lines), len(lines)))index = 0
for line in lines:print("line[{0}]: {1}".format(index, line), end="")index += 1
print("\n=========================================================")
with open("python_basic/source/example.txt", 'r') as f:line = f.readline()while line:print(line, end="")line = f.readline()print("\n=========================================================")
with open("python_basic/source/example_write.txt", 'w+') as f:f.write("wangchen date:20250810\n")print("write success!")
__name__

`__name__ 是一个内置变量,表示当前模块的名称

__name__ 的值取决于 模块是如何被使用的, 如果作为主程序运行, __name__ 会被设置为 __main__
如果作为子模块被导入, __name__ 会被设置为模块的名称

__main__ 是一个特殊的字符串,用于表示当前模块是作为主程序运行的, __main__ 通常与 __name__ 变量一起使用,以确定模块是被导入还是作为独立脚本运行

http://www.dtcms.com/a/455038.html

相关文章:

  • 网站网址查询ip织梦网站设计
  • 织梦网站怎么做301c2c商城网站建设二次开发
  • 品牌网站开发设计培训网站网站建设
  • 360免费网站空间上海培训网站建设
  • 电脑做网站用word网站如何做品牌宣传
  • 网站模板管理系统厦门谷歌seo公司
  • html网站模板源码wordpress chuxia主题
  • 上海交通网站建设设计的网站都有哪些内容
  • 宣传网站建设方案网站建设推广选哪家
  • 上传电影网站源码画画在线
  • 中职学校网站建设方案企业宣传片制作软件
  • 网站开发方案 文档html网页制作心得体会
  • 网站用 做有什么好处手机网站左右滑动
  • 网站开发需要数据库徐州建设工程招标信息网官网
  • 协议栈之 BLE 和 经典蓝牙
  • Python 与 C++、C 语言的区别及选择指南
  • 模板做网站多少钱三网合一网站方案
  • 数据驱动提速关键:关系型云数据库如何靠技术选型与AI运维重塑业务效率?
  • 株洲网站制作建设广州市住房与城乡建设厅网站
  • j2ee网站开发免费教程wordpress支付插件安装
  • 网站数据库问题网站开发专业就业培训学校
  • 永嘉县住房和城乡规划建设局网站增加网站关键词库
  • 昆明网站建设加王道下拉大型行业门户网站开发建设方案
  • 上海专业制作网页seo关键词优化排名哪家好
  • 网站建设公司新排行榜上海网站建设 缔客
  • 企业网站建设合同如何能进深圳好的设计公司网站
  • 网站开发时间段安徽省建设工程信息网官网怎么查询个人信息
  • 黑龙江省建设工程质量协会网站wordpress 打开好慢
  • 组播实验-PIM SM、BSR、PIM SSM
  • 做seo营销网站有关大学生做兼职的网站