python -- None关键字

对于None关键字,个人感觉:我们暂时可以将它理解为一个占位的东西

1. None 关键字是什么 :

None表示没有值,None是NoneType数据类型的唯一值(就像布尔类型有唯二的两个值:False和True)

2. None 关键字出现的原因是什么(什么时候使用None):

(一) 如果你希望变量中 存储的东西 不会与 一个真正的值 混淆时,这个没有值的值就可能有用。

                                                           --cite ref :在《Python变成快速上手中,让凡所工作自动化》

例如,当我们定义一个函数而不显示的使用return 结束该函数体时,编译器会认为这个函数没有返回值,并自动将 “ None”  作为返回值,补充在函数末尾 形成 return None 语句

(二)先明确一下python 变量 的性质:

对于python来说,一个很重要的、不同于c、c++ 语言的点在于: (1)Python 不需要事先声明变量名及其类型,直接赋值即可创建各种类型的变量。(同时,虽然python不需要在使用变量之前显示地声明变量及其类型,但,Python仍属于强类型编程语言:即,Python解释器会根据赋值或运算来自动推断变量的类型(2)同时,Python还是一种动态类型的语言,即:python中的变量类型可以随时改变即,可以通过 x = 12 创建一个整型变量 x ,接着执行语句 x = "lalalal" ,那么这条语句执行后,创建了一个字符串类型的变量x ,之前创建的整型变量 x 自动失效

python 具有自动内存管理功能,对于没有任何变量指向的值,python会自动将该值对应的存储空间释放掉。所以,相对的,python中无法建立不给定赋值的变量:一来是python中变量类型由赋值和运算来确定;二来是python中的变量只要存在,就一定要给这个变量分配内存空间(更严谨的说法是,python中只要一个变量存在,那么,就一定有一块内存空间被该变量所指向)。现在若变量没有赋值,就相当于没有一块 属于该变量的内存空间 可以被 该变量所指向,与python的要求相矛盾 。所以,在python中,不准许  "声明变量而赋值" 这一行为

                                        --cite ref :在《Python程序设计基础(第二版)》董付国 清华大学出版社

@@ 所以,使用None关键字的第二种原因是:

(情况一):当我不知道这个变量它应该是啥类型时,我在写代码的时候,没想好这个变量,比如说工资变量wage,我应该是用整型变量还是附点型变量。当然,由于python是动态类型语言,变量类型可以随时改变,但为了防止造成误解,我可以选择先用 “None” 这个不表示任何值的值 顶上去 :因为 None 却是可以作为一个值 赋给变量 ,但同时它有却是没啥含义, 这样做就可以防止引起歧义

(情况二):我知道这个变量是什么类型,但是我不知道这个变量应该是什么值

比如现在我知道,要定义一个字符串类型的变量 x :

于是代码写为 x = "" ,即给变量x付了一个空字符串的值。

这样做不是不行,但是有个缺点就是:①即使 x 是空字符串依然消耗了不少的空间(因为在python中,字符串是一个对象,虽然现在该字符串看起来是一个空的没有内容的值,但实际上,该空字符串对应了一个Python下的字符串类的实例,python在内存中创建了一个结构体,开辟了一段空间来存放字符串实例的一些具体的属性。所以,实际上 x 作为类的实例在内存中占的空间大于空串字符串所包含的值所占的空间),②并且,空字符串也是一串字符串,不是我们本来想表达的空的含义。

所以,这种情况,就还是建议写为 x = None 然后得到具体值时,再赋值 x = "lalala"

(但我个人感受是,写成x = "" 也挺好的 )

【Note】有一种情况是:同一类的两个实例之间准许进行交互的话,此时,一个实例A无法在另一个实例B没有定义之前使用B中的一些属性,所以此时就可以现将实例B用None填充

===================手动分割线=============下面的每整理只是temp========

1.变量

(1)Python是一种动态类型的语言:变量的类型是可以随时变化的。

(2)内置函数type()用来返回变量的类型

         Python虽然不显示声明变量类型但是是一种强类型编程语言:python 解释器会根据赋值或者运算来自动推断变量类型

x=3
print(type(x))
x="wwwwww"
print(type(x))
print( isinstance(x,str) )     #isinstance()用来测试对象是否为指定类型的实例

#==============输出================
<class 'int'>
<class 'str'>
True

(3)python采用的是基于值的内存管理方式:

在Python中修改变量值的操作不是修改变量指向地址中存储的值,而是:①a=a+3  :取变量a所指向的内存中的值,加上3,把得到的和存储在新的内存空间中,把此时变量a指向的地址修改为(+3后)和所在的地址②a=9  :在存储空间中找到新的空间存放数据9,把变量a指向的地址改为 存放数据9所在的地址 (书中语言是:“数字属于Python不可变对象,修改变量值的时候并不是真的修改变量的值,而是先把值存放内存中然后修改变量使其指向了新的内存地址”)

如果为不同的变量赋予一个相同的值,这个值在内存中就只有一份,然后这些变量都指向同一块的内存地址

python有自动内存管理功能,会自动删除不再有变量指向的值  ( 但是显示使用del命令删除不需要的值或者关闭不需要访问的资源是个好习惯)

a=3
b=3
print("a:",id(a))    #id()用来反汇编两所纸质的内存地址
print("b:",id(b))
c=a
print("c:",id(c))

a=a+4
print("a:",id(a))
print("c:",id(c))
a=9
print("a:",id(a))
print("c:",id(c))

#==============输出================
a: 4524317312
b: 4524317312
c: 4524317312
a: 4524317440
c: 4524317312
a: 4524317504
c: 4524317312

=================

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值