[oeasy]python0135_变量名与下划线_dunder_声明与赋值

简介: [oeasy]python0135_变量名与下划线_dunder_声明与赋值

变量定义 回忆上次内容

  • 变量 就是 能变的量
  • 上次研究了 变量标识符的 规则
  • 第一个字符 应该是 字母或下划线
  • 合法的标识符可以包括
  • 大小写字母
  • 数字
  • 下划线



  • 还研究了字符串(str)的函数
  • isidentifier
  • 查询字符串
  • 是否为合法标识符



  • 最后发现
  • 这个isidentifier函数有时候不好使?


添加图片注释,不超过 140 字(可选)

  • 这怎么理解呢??🤔

翻看文档

  • and 属于关键字

添加图片注释,不超过 140 字(可选)

  • 如何判断一个字符串是否是关键字呢?

添加图片注释,不超过 140 字(可选)

判断是否为关键字

添加图片注释,不超过 140 字(可选)

  • 关键字 是不能作为标识符的
  • dir()查询模块的时候
  • 经常会看到下划线


添加图片注释,不超过 140 字(可选)

  • 这些下划线如何理解?

下划线

  • from module import * 时
  • 以下划线开头的变量
  • 不被其他模块引用



添加图片注释,不超过 140 字(可选)

  • 所以 _a 可以作为模块内部的变量或者函数

内部变量

  • 除非明确点名

添加图片注释,不超过 140 字(可选)

  • 指清名字 _pi
  • 是可以导入的


  • 不点名不能用吗?

不点名

添加图片注释,不超过 140 字(可选)

  • from random import *
  • 无法导入_e


添加图片注释,不超过 140 字(可选)

上次的值

  • 在游乐场里
  • _下划线 意味着上次的值


添加图片注释,不超过 140 字(可选)

后面的下划线

  • 在后面加上下划线
  • 一般是为了区分已经有的标识符


添加图片注释,不超过 140 字(可选)

  • 使用max
  • 会把max函数 屏蔽掉


  • 使用max_
  • 不会屏蔽 max函数


两端双下划线(dunder)

添加图片注释,不超过 140 字(可选)

  • 系统定义的标识符
  • 模块名
  • 函数名
  • 变量名


添加图片注释,不超过 140 字(可选)

  • dunder变量都是有用意的
  • 不要轻易破坏


前有双下划线

  • 类里面的私有名
  • 无法直接存取


  • 目的是
  • 避免 和 父类或子类的私有变量 重名


添加图片注释,不超过 140 字(可选)

  • 我们再来看看 o 这个变量标识符

细节

  • o 两边并不加引号
  • 因为 这里的 o 是 变量标识符
  • 而不是 字符串
  • 如果加了双引号 就是字符串了



添加图片注释,不超过 140 字(可选)

  • 在等号两端 都保留 有一个空格
  • 可是 为什么要 加空格呢?


可读性

  • 增加文档的可读性
  • 不会 影响程序的执行速度


添加图片注释,不超过 140 字(可选)

  • 这两句话从何说起

加空格的原因

  • 这两句话来自于python之禅

添加图片注释,不超过 140 字(可选)

  • 现在到底有多少变量呢?

locals()

  • 查询本地变量
  • 有一个内置的函数叫做 locals

添加图片注释,不超过 140 字(可选)

  • 可以查询关于 locals 的帮助

添加图片注释,不超过 140 字(可选)

  • 返回的是一个包含当前域中所有变量的字典
  • 声明和赋值都使用等号
  • 声明并赋值 变量o 之后
  • 变量o 真的在内存里有位置了么?


  • 我们来看看

具体位置

添加图片注释,不超过 140 字(可选)

  • id函数是什么意思?
  • help(id)


添加图片注释,不超过 140 字(可选)

  • id返回 对象o的标识符
  • o 确实在内存中 有了位置
  • 但是如果 我们给变量新赋 一个值



  • 那么 存储变量的位置
  • 还是那个 内存地址 么?


实践

  • 虽然 a这个变量名 没有变
  • 但是 id(a)变了


添加图片注释,不超过 140 字(可选)

  • 也就是说
  • a这个容器的 内存位置没变
  • 但是a所指向的 变量位置
  • 在内存中的位置 变了



  • 两次赋值 都是STORE到a这个NAME里面
  • 第二次赋值 和 第一次赋值
  • 有什么区别吗?



区别

  • 变量的声明和赋值究竟有什么不同
  • 第一次赋值时
  • 声明和赋值是同时完成的



添加图片注释,不超过 140 字(可选)

  • 如果是 第二次赋值 呢?

纯赋值

  • 声明了之后
  • 再有 等号赋值 就是 第二次赋值


添加图片注释,不超过 140 字(可选)

  • 是 纯赋值
  • 没有声明新的变量


总结

  • 这次 了解了isidentifier的细节
  • 关于 关键字
  • 关于 下划线


  • 如何查询 变量所指向的地址?
  • id


  • 如何查询 已有的各种变量?
  • locals


  • 如果 用一个变量a的值
  • 给另一个变量b 赋值
  • 是什么样的过程 呢??🤔



目录
相关文章
|
4天前
|
Rust JavaScript 前端开发
[oeasy]python075_什么是_动态类型_静态类型_强类型_弱类型_编译_运行
本文探讨了编程语言中的动态类型与静态类型、强类型与弱类型的概念。通过实例分析,如Python允许变量类型动态变化(如`age`从整型变为字符串),而C语言一旦声明变量类型则不可更改,体现了动态与静态类型的差异。此外,文章还对比了强类型(如Python,不允许隐式类型转换)和弱类型(如JavaScript,支持自动类型转换)的特点。最后总结指出,Python属于动态类型、强类型语言,对初学者友好但需注意类型混淆,并预告下期内容及提供学习资源链接。
45 21
|
2天前
|
Python Windows
[oeasy]python076_int这个词怎么来的_[词根溯源]整数类型_int_integer_touch
本文探讨了“int”一词的起源及其与整数类型的关联。通过词根溯源,揭示“int”来源于“integer”,意为“完整的数”,与零碎的分数相对。同时分析了相关词汇如“tact”(接触)、“touch”(触摸)及衍生词,如“tangential”(切线的)、“intagible”(无形的)和“integral”(完整的、不可或缺的)。文章还结合编程语言特性,解释了Python作为动态类型、强类型语言的特点,并总结了整型变量的概念与意义。最后预告了后续内容,提供了学习资源链接。
31 11
|
6天前
|
Python
[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅
本文回顾了从模块导入变量和函数的方法,并通过一个求和程序实例,讲解了Python中输入处理、类型转换及异常处理的应用。重点分析了“明了胜于晦涩”(Explicit is better than implicit)的Python之禅理念,强调代码应清晰明确。最后总结了加法运算程序的实现过程,并预告后续内容将深入探讨变量类型的隐式与显式问题。附有相关资源链接供进一步学习。
19 4
|
2月前
|
人工智能 Shell 开发工具
[oeasy]python062_在python中完成输入和输出_input_print
本文介绍了在Python中使用`input()`和`print()`函数完成输入和输出操作的基础知识。通过编写简单的程序,如问候用户和统计苹果数量,演示了如何添加提示信息、处理用户输入并输出结果。同时,回顾了上一次课程内容,包括`input`函数的参数和提示词的使用。文中还展示了如何在vim编辑器中编写和运行Python代码,并对vim和shell的基本操作进行了总结。最后提供了相关学习资源链接,方便读者进一步学习。
147 66
|
12天前
|
Shell Python
[oeasy]python072_名字空间是怎么玩的_from_import_as_导入_namespace
本文介绍了Python中名字空间和模块导入的使用方法。主要内容包括: 1. **回忆上次内容**:回顾了之前导入系统模块(如`__hello__`、`time`)和自定义模块(如`my_file`),并介绍了如何导入和使用模块中的变量。 2. **从shell开始**:展示了如何在命令行中编辑和切换文件,以及如何通过`import`语句引入模块。 3. **修改oeasy.py**:演示了如何通过`import my_file`导入模块,并将模块中的`pi`赋值给本地变量`pi`。 4. **locals()函数**:解释了如何使用`locals()`查看当前作用域内的本地变量及其值。
27 8
|
10天前
|
Python
[oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量
本文回顾了Python中从模块导入变量和函数的方式,重点讨论了避免本地变量名冲突(local name clashes)的方法。通过`from module import variable as alias`可以为导入的变量重命名,防止冲突。根据PEP8规范,建议避免使用`from module import *`,因为它会导入模块中所有非下划线开头的变量,容易引发冲突。下划线在变量命名中有特殊含义:单个前导下划线表示内部变量,后置下划线用于避免与关键字冲突,双下划线前后包围表示系统变量。总结了下划线的不同用法及其作用。下次将继续探讨更实用的编程技巧。
27 3
|
1月前
|
人工智能 Shell 开发工具
[oeasy]python065python报错怎么办_try_试着来_except_发现异常
本文介绍了Python中处理异常的基本方法,重点讲解了`try`和`except`的用法。通过一个计算苹果重量的小程序示例,展示了如何捕获用户输入错误并进行处理。主要内容包括: 1. **回顾上次内容**:简要回顾了Shell环境、Python3游乐场和Vim编辑器的使用。 2. **编写程序**:编写了一个简单的程序来计算苹果的总重量,但发现由于输入类型问题导致结果错误。 3. **调试与修正**:通过调试发现输入函数返回的是字符串类型,需要将其转换为整数类型才能正确计算。
58 32
|
21天前
|
人工智能 自然语言处理 Shell
[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder_双下划线
本文介绍了如何在Python中导入模块及其作用,重点讲解了`__hello__`模块的导入与使用。通过`import`命令可以将外部模块引入当前环境,增强代码功能。例如,导入`__hello__`模块后可输出“Hello world!”。此外,还演示了如何使用`help()`和`dir()`函数查询模块信息,并展示了导入多个模块的方法。最后,通过一个实例,介绍了如何利用`jieba`、`WordCloud`和`matplotlib`模块生成词云图。总结来说,模块是封装好的功能部件,能够简化编程任务并提高效率。未来将探讨如何创建自定义模块。
35 8
|
19天前
|
缓存 Shell 开发工具
[oeasy]python071_我可以自己做一个模块吗_自定义模块_引入模块_import_diy
本文介绍了 Python 中模块的导入与自定义模块的创建。首先,我们回忆了模块的概念,即封装好功能的部件,并通过导入 `__hello__` 模块实现了输出 "hello world!" 的功能。接着,尝试创建并编辑自己的模块 `my_file.py`,引入 `time` 模块以获取当前时间,并在其中添加自定义输出。
23 4
|
1月前
|
数据库 Python
[oeasy]python066_如何捕获多个异常_try_否则_else_exception
本文介绍了Python中`try...except...else`结构的使用方法。主要内容包括: 1. **回顾上次内容**:简要复习了`try`和`except`的基本用法,强调了异常处理的重要性。 2. **详细解释**: - `try`块用于尝试执行代码,一旦发现错误会立即终止并跳转到`except`块。 - `except`块用于捕获特定类型的异常,并进行相应的处理。 - `else`块在没有异常时执行,是可选的。 3. **示例代码**:通过具体例子展示了如何捕获不同类型的异常(如`ValueError`和`ZeroDivisionError`),并解释了异常处理
56 24