一木.溪桥学Python-11:迭代器、生成器、面象对象class MyClass:、self 参数、 __init__() 方法、__str__() 方法

本文是一木.溪桥在Logic Education跟Amy学习Python的笔记,涵盖了迭代器、生成器和面向对象的基础知识。迭代器介绍了可迭代对象、迭代器的区别及其使用;生成器讨论了为何需要生成器、如何创建生成器,包括生成器表达式和生成器函数;面向对象部分涉及类、对象、self参数、__init__()和__str__()方法。

一木.溪桥 在Logic Education跟Amy学Python

逻辑教育 :https://logicedu.ke.qq.com

12期:Python基础课

一木.溪桥学Python-11:迭代器、生成器、面象对象class MyClass:、self 参数、 __init__() 方法、__str__() 方法

日期:2021年1月8日


学习目标:

  • 迭代器
  • 生成器
  • 面象对象class MyClass:
  • self 参数
  • __init__() 方法
  • __str__() 方法

学习内容:

迭代器

迭代器介绍

迭代器指的是迭代取值的工具,迭代是指一个重复的过程,每一次重复都是基于上一
次结果而来迭代提供了一种通用的 不依赖索引 的迭代取值方式

可迭代对象

可以用 for 循环遍历的对象都是可迭代对象。
str,list,tuple,dict,set 等都是可迭代对象。
generator (生成器 和 yield 的生成器函数) 也是可迭代对象。

判断是否可迭代
  • 是否有内置的__iter__方法
    isinstance(obj, Iterable)
    -eg.
# 通过isinstance来判断其是否是可迭代的对象
from collections import Iterable        # collections是内置的模块
print(isinstance("abc", Iterable))      # True
print(isinstance({1, 2, 3}, Iterable))  # True
print(isinstance(2.15, Iterable))       # False
  • 有内置的__iter__()方法的对象,执行迭代器的__iter__()方法得到的依然是迭代器本身
  • 有内置的__next__()方法的对象,执行该方法可以不依赖索引取值
  • 问题: 可迭代的对象一定是迭代器吗?False
  • eg.
# 说明:可迭代的对象不一定是迭代器
# 1.看其是否含有__iter__以及__next__方法
# 2.看其是否属于Iterator
from collections import Iterator
li = [1,2,3,4]
print(isinstance(li, Iterator))         # False
iter()

可以被 next() 函数调用并不断返回下一个值的对象称为迭代器:Iterator。那我们可以通过 iter() 方法将可迭代的对象,转为迭代器。

  • eg.
li = [1, 2, 3, 4]
print(type(li))         # <class 'list'>
# lis = li.__iter__()
lis = iter(li)          # iter()方法就可以将可迭代的对象转为迭代器
print(type(lis))        # <class 'list_iterator'>
__next__()
  • 注意:
    迭代器不可以通过下标取值,而是使用 __next__() 或者 next() 。但是只要超出
    范围则直接报错 StopIteration 。
    next() 只能顺延调用,不能往前。

  • eg.

li = [1, 2, 3, 4]
print(type(li))         # <class 'list'>
# lis = li.__iter__()
lis = iter(li)          # iter()
<think>好的,我现在需要帮助用户解决在Linux上安装python-geohash时由于缺少wheel包而不得不使用legacy setup.py install的问题。用户希望避免这种情况,转而使用wheel包来安装。 首先,我得回忆下用户之前的对话历史。用户之前询问过如何在Linux安装python-geohash,我给出了步骤,包括安装依赖、使用pip安装,处理导入错误等。现在用户遇到了新的问题,涉及wheel包的缺失,导致pip回退到旧的安装方法。这可能是因为python-geohash没有提供预编译的wheel,或者用户的环境中没有安装wheel包,导致pip无法生成wheel,只能使用setup.py。 根据用户提供的引用内容,特别是引用[2]和[3],问题通常出现在项目缺少pyproject.toml且没有安装wheel包时,pip会使用旧的setup.py方式。解决方法可能包括安装wheel包,强制使用PEP 517标准,或者手动构建wheel。 首先,用户需要确保系统中已经安装了wheel包。根据引用[3],安装wheel可以避免使用legacy方法。所以在步骤里,应该先让用户安装wheel。命令是pip install wheel,如果用户使用Python3,可能需要用pip3。 然后,可能需要强制pip使用PEP 517模式,这可以通过--use-pep517选项实现,如引用[2]提到的。所以安装命令应该是pip install --use-pep517 python-geohash。不过,我需要确认这个选项是否适用于当前的情况,或者是否需要其他参数。 另外,用户可能遇到的情况是,即使安装了wheel,但python-geohash本身可能没有提供合适的配置,导致pip仍然无法生成wheel。这时候可能需要用户手动构建wheel。步骤包括下载源码包,使用python setup.py bdist_wheel生成wheel文件,然后安装。但这种方法需要用户先获取源码,可能稍微复杂,但可以作为备选方案。 另外,用户可能需要升级pip本身,因为旧版本的pip可能存在兼容性问题。所以建议用户先升级pip:pip install --upgrade pip。 此外,引用[4]提到另种安装方法是用python setup.py install,但用户想避免这个,所以重点应该放在如何让pip使用wheel。 可能的步骤总结: 1. 安装wheel包。 2. 升级pip到最新版本。 3. 使用--use-pep517选项安装。 4. 如果仍然失败,手动构建wheel。 另外,需要考虑Linux环境下可能的依赖问题,比如是否安装了编译所需的工具,如gcc、python-dev等,这些在之前的回答中已经提到,用户可能已经安装过了,但可能需要再次确认,避免编译时出错。 还要检查python-geohash的PyPI页,看看它是否提供了wheel分发。如果官方没有提供wheel,那么用户可能需要从源码构建wheel,或者等待维护者提供。但根据用户的情况,可能需要手动处理。 最后,验证安装是否成功,用import geohash测试,如之前的步骤所示。 综上,分步骤的解决方案应包括安装wheel、升级pip、使用PEP 517,以及备选的手动构建方法,并确保系统依赖已安装。</think>### 分步解决方案 #### 步骤1: 安装或更新`wheel`包 Wheel是Python的二进制包格式,可避免使用`setup.py install`的旧安装方式。 ```bash pip install --upgrade wheel # 确保已安装最新版wheel # 若使用Python3且默认命令为pip3: pip3 install --upgrade wheel ``` #### 步骤2: 强制启用PEP 517模式 通过添加`--use-pep517`参数,强制pip使用现代构建系统(避免回退到`setup.py`)[^2]: ```bash pip install python-geohash --use-pep517 ``` #### 步骤3: 安装编译依赖(备用) 若仍提示构建失败,需确保系统已安装编译工具链: ```bash sudo apt-get update sudo apt-get install python3-dev gcc # 提供Python头文件和C编译器[^1] ``` #### 步骤4: 手动构建Wheel并安装(终极方案) 如果上述方法无效,可手动下载源码并构建Wheel: ```bash # 下载源码包 pip download python-geohash --no-binary :all: tar -xzf python-geohash-*.tar.gz # 解压源码 cd python-geohash-*/ # 生成Wheel文件 python setup.py bdist_wheel # 生成.whl文件 # 安装生成的Wheel pip install dist/*.whl # 自动使用二进制包 ``` #### 验证安装 ```python import geohash print(geohash.encode(39.9, 116.4)) # 预期输出类似'wx4g' ``` --- ### 关键问题解析 1. **为何强制使用PEP 517?** PEP 517定义了无需`setup.py`的构建标准,通过`pyproject.toml`声明构建依赖,避免传统安装方式的不稳定性。 2. **手动构建Wheel的作用** 当PyPI未提供预编译Wheel时(如某些库未适配Linux平台),手动构建可生成适配当前系统的二进制包,后续安装无需重复编译[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值