Python教程中的思考

Python教程中的思考,第1张

一直没能系统性的看看Python,都是用一点学一点,遇到不熟悉的部分效率就很低。



最近终于有时间看看《Python菜鸟教程》和《python编程从入门到实践》,这两部分是很好的入门资料和书籍,感觉新手读完这两就能解决平时80%的问题了。


Python也很繁杂,师父领进门,修行靠个人,大体有了把握,遇到实际问题再细致攻克,自认为是效率最高的模式,一口吃个胖子的方法并不可取。


《Python菜鸟教程》:Python3 基础语法 | 菜鸟教程
Python 入门指南 — Python tutorial 3.6.3 documentation
《python编程从入门到实践》:某宝搜索,我愿称为 “python圣经”

1.  python import 导入两个模块同时有同一名称的方法如何调用 ?
python import 导入两个模块同时有同一名称的方法如何调用 ? - myrj - 博客园

2. 不同于C++、Java,python中的变量不需要提前声明,即python是动态语言,变量没有变量类型一说,变量名只是一个引用,引用的对象才有所谓的类型——数据类型。


标准的数据类型有6种,可用两个标准衡量(区分):(1)数据类型本身是否为可变数据;(2)数据类型的元素是否是可变数据

数据类型本身是否可变数据类型元素是否接受可变数据类型
Number(数字)否(不可变类型)无元素
String(字符串)否(不可变类型)无元素
Tuple(元组)否(不可变类型)
List(列表)是(可变类型)
Dictionary(字典)是(可变类型)键(key)必须使用不可变类型
值(value)任意数据类型均可

Set(集合)

是(可变类型)

注:Set(集合)不能接受可变数据类型,即集合的元素只能是Number(数字)、String(字符串)、Tuple(元组),但常常需要使集合的元素是另外的集合,因而需要用到 frozenset(s) ,将可变集合类型变为不可变集合类型以此解决。


3. 变量是对象的引用,此处延伸下变量和对象之间的关系,截取自文后笔记(Python3 基本数据类型 | 菜鸟教程):

  • 赋值 *** 作,本质是创建引用
  • 变量是变量,对象是对象,当将某个对象赋值给某个变量时,可以认为是创建了变量对该对象的引用
  • 变量没有数据类型之说,只有对象有,即变量不是直接代表对象或对象占用的内存空间
  • Python中,变量无需提前声明,无需指定其数据类型,其表现完全是动态的,其所为的数据类型决定于当前该变量所引用的对象的数据类型
  • 所谓变量对对象的引用,本质是创建了变量指向对象内存空间的指针
  • 对象内存空间,一般最起码有类型和当前被引用次数这两个信息,类型记录了该对象的数据类型,被引用次数记录了该对象内存空间被变量引用的次数
  • 当某对象的被引用次数为0时,Python便会自动回收该对象内存空间

比如下面的

a=10
a='122'
a=[1,2,3]
del a

此时,a在不同的赋值代码行中,引用的对象类型不同,相当于在不断改变a引用的对象,最后当把a变量删除时,其实本质只是删除了a变量名,但由于a引用的[1,2,3]对象,因为a被删除,其被引用次数变为0,也就自动被Python回收,最终表现就是del a时,[1,2,3]也被删除了。


另外一个小知识是,Python为提升代码执行和内存分配效率,会对一些常用的对象提前创建好,并常驻内存,比如下面:

id(4) #不管运行多少次该代码,其返回的值均不变,因为python会保持一些常用的数字常驻内存,不会每次都重新分配内存空间
id('hello world') #每次运行,返回的值均会发生变化,因为每次运行,相当于都在重新分配内存空间

注:当出现一行多个赋值的时候,如 x = y = ['aaa', 'bbb'] ,其实只是对列表对象创建了多个引用而已,并未实际创建多个对象。


所以当改变其中一个引用的某值时,x[0] = 'ccc',那么 y[0] 也会相应改变为 'ccc'

4. 变量(引用)与对象的关系
判断变量是否对应同一个对象,可用 is 判断,var1 is var2; is本质是通过对象的内存id号判断的,即判断变量是否引用同一个对象。



对于python的六种标准数据类型,若数值完全相同,那么只有数字和元组类型的数据id号是相同的。


其他类型数据,即使数值完全相同,但具有不同的id。


list1=[1000,3,5]
list2=[1000,3,5]
print(list1 is list2)
tuple1=(1000,3,5)
tuple2=(1000,3,5)
print(tuple1 is tuple2)
str1 = 'aaa'
str2 = 'bbb'
print(str1 is str2)
num1 = 10000
num2 = 10000
print(num1 is num2)
dict1={1:1000,2:3,3:5}
dict2={1:1000,2:3,3:5}
print(dict1 is dict2)
set1 = {'aaa', 'bbb'}
set2 = {'aaa', 'bbb'}
print(set1 is set2)

分别对应列表、元组、字符串、数字、字典、集合类型的数据,判断结果为:
False
True
False
True
False
False

5. 逻辑运算符 and 和 or
and 从左到右计算表达式,若所有值均为真,则返回最后一个真值;若存在假,则返回第一个假值;
or 也是从左到有计算表达式,若有真值,则返回第一个为真的值;若全为假值,则返回最后一个假值。


其中数字 0 是假,其他都是真;字符 "" 是假,其他都是真。


6. python中的进制问题
python中默认输入输出都是十进制

输入进制改变:
 

二进制0b
a = 0b111100
八进制0o
a = 0o77
十六进制0x
a = 0xFF

 

输出进制改变:
 

二进制bin(a)
八进制oct(a)
十六进制hex(a)

7. max()函数
max(x, y[, z...]):Number|Sequence 入参类型不能混入。


要么全Number(int|float|complex|bool),要么全序列,但注意传入的序列类型应保持一致,即要么全传列表,要么全传元组。



入参是序列的话: 单序列入参,返回序列中最大的一个数值多序列入参, 按索引顺序,逐一对比各序列的当前索引位的 “值”,直到遇见最大值立即停止对比,并返回最大值所在的序列(也就是说,多序列入参,返回值依旧是一个序列,而不是数值)

注:如果出现max函数中元素完全相等的情况,那么max函数默认返回第一个对象。


8. round()函数中的坑
Python 中关于 round 函数的小坑 | 菜鸟教程

9. 放到

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/569406.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-09
下一篇2022-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存