好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Python入门笔记3

Python入门笔记3

Python入门笔记(3):基础(下)

一、数字

在看《Python 核心编程》的时候,我就有点疑问,为什么没有把Python数字放在基础范围之内呢,可能作者先要通过Python对象,然后在深入到数字,这样会更加容易理解。这里有一个观点就是 “Python的一切皆对象”原则 ,通过上一节的学习变量赋值,就能深刻体现这个原则,具体见下节的学习入门笔记。

由于数字在Python中用到的并不很多,就像学js的数字类型一样,我觉得最好放在基础篇之内,这样对于下节的对象有个铺垫的作用。

本节主要是学习Python的数字类型、操作、与数字有关的内建函数。

1、数字类型

 在上节中说,Python变量无须定义类型,这是由于它是动态类型的语言,在内存中根据所赋值动态地确定其类型。如果偏偏要在python中给变量分类的话,那么可分: 可变类型和不可变类型 。

这里整理了可变类型(mutable)和不可变类型(immutable)的相关知识:
(或许我们在学习了下一节才能对此有深刻理解,如果曾学习过C,它像C指针的艺术;如果学了C#,它像C#值类型与引用类型的性质;如果学了js,它的性质基本上同Python;总的来说,一切的编程语言都围绕着基础核心,只是各自体现不一样而已,我们要学会融会贯通,举一反三。。。不过感觉好难哦。)

这里推荐一篇文章: 《如何学会600多种编程语言》  -----------------------------------------------------------------------------------

不可变类型(immutable):就是内存中的那可内容(value)是否可以被改变,如果是不可变则,在对对象本身操作的时候,必须在内存的另外地方再申请一块区域(因为老区域#不可变#),老的区域就丢弃了(如果还有其他ref,则ref数字减1,类似unix下的hard-link)。

可变类型(mutable):对对象操作的时候,不需要再在其他地方申请内存,只需要在此对象后面连续申请(+/-)即可,也就是它的address会保持不变,但区域会变长或者变短。

不可变类型有:string、interger、tuple:

  1  >>> var1 = 1
  2  >>> var2 =  var1
   3  >>>  var1,var2
   4  (1, 1 )
   5  >>> id(var1),id(var2)  #  同指同一内存区域,id相同 
  6  (21200672, 21200672 )
   7  >>> var1 += 1
  8  >>>  var1,var2
   9  (2, 1 )
  10  >>> id(var1),id(var2)
# 由于var1,var2数据不可变的,对var1+1后,申请另外一块区域,id(var1)变了,id(var2)不变,对此区域ref数字-1 11 (21200660, 21200672 ) 12 >>>

可变类型:list,dict

  1  >>> lst1 = [1,2,3 ]
   2  >>> lst2 =  lst1
   3  >>>  lst1,lst2
   4  ([1, 2, 3], [1, 2, 3 ])
   5  >>>  id(lst1),id(lst2)
   6  (28497360, 28497360 )
   7  >>> lst1.append(4) #  可变类型的,append后,address会保持不变 
  8  >>>  lst1,lst2
   9  ([1, 2, 3, 4], [1, 2, 3, 4 ])
  10  >>> id(lst1),id(lst2) #  lst1,lst2一直指向同一区域 
 11  (28497360, 28497360 )
  12  >>>
 13   在操作这种类型的时候要特别小心,dict的key不用可变类型的,函数传参的时候不用可变类型的。
  14   eg:
  15  >>>  def  dis(arg= []):
  16  ...     arg.append( '  1  '  )
  17  ...      print   arg
  18   ...
  19  >>>  dis()
  20  [ '  1  '  ]
  21  >>>  dis()
  22  [ '  1  ' ,  '  1  '  ]
  23  >>> id(dis())
  24  [ '  1  ' ,  '  1  ' ,  '  1  '  ]
  25  505246615
 26  >>> id(dis())
  27  [ '  1  ' , '  1  ' , '  1  ' , '  1  '  ]
  28  505246615

参考:http://blog.chinaunix.net/uid-26249349-id-3080279.html


数字就是不可变类型,也就是说更改数字的值就会产生新的对象,当然这个我们无须考虑。

python数字类型可分为:整型、长整型、布尔型、双精度浮点型、十进制浮点型和复数

(1)、整型:

(2)、布尔型

True、False

(3)、长整型

在整型后面加L(或l),目前整型和长整型在慢慢统一。只有对它调用repr()函数才有机会看到L,调用str()函数则看不到L:

>>> aLong=11111111111111111111
>>>  aLong  (在命令行中,直接输入变量名显示值,这种情况实际上调用了repr()函数)    
 11111111111111111111L
>>>  print   aLong (在命令行中,如果在变量前面使用print 则调用str()函数)    
 11111111111111111111
>>> 

(4)、双精度浮点型

类似C中的double。实际精度依赖Python解释器的编译器。

(5)、复数

  1  >>> aComplex=2.1+3j
  2  >>>  aComplex
   3  (2.1000000000000001+3j )
   4  >>>  aComplex.real
   5  2.1000000000000001
  6  >>>  aComplex.imag
   7  3.0
  8  >>>  aComplex.conjugate()
   9  (2.1000000000000001-3j )
  10  >>> 

更多见python core programming

2、操作符

分别是:+、-、*、/、%、**、//(地板除)

很有意思的是,python的除法运算。

在js中实现以下代码:

 1  <script type="text/javascript">
 2   var  a=1,b=2 ;
  3   var  c=0.1,d=0.2 ;
  4   var  result1=a/b;
 5   var  result2=c/d;
 6  alert(result1);#0.5    
 7  alert(result2);#0.5
 8  </script>

如果我们在Python中实现,则如下:

>>>1/2 
0
 >>>0.1/0.2
0.5

有些奇怪吧,Python是这样处理的;

传统除法 :如果是整型除法,则传统除法会舍弃小数点部分,返回一个整型(地板除);如果操作数之一是浮点型,则执行真正地除法。

真正除法 :返回真实的商,在未来Python版本中会成为统一标准,不过现在我们通过from __future__ import division可以实现。

>>>  from   __future__   import   division
 >>> 1/2
0.5
>>> 1.0/2.0
0.5

地板除 :从Python2.2开始,新操作符//,被称为地板除、即不管操作数是什么类型,总会舍弃小数部分,返回整数。

>>> 1//2 
0
 >>> 1.0//2.0
0.0
>>> -1//2
-1

其他操作符有兴趣可以在《Python 核心编程》和官网文档看看。

3、与数字有关的内建函数

关于更多内建函数,将会在后面学习中具体说明,今天先学习关于数字的内建函数。它们有:

(1)、标准内建函数:

cmp()、str()、type()对于任何类型都可以使用

>>> cmp(1,2)  #  比较大小    
-1
>>> cmp(2,1 )
 1
>>> cmp(2,2 )
0
 >>> str(0xFF)  #  转换成字符串 
 '  255  ' 
>>> type(0xFF)  #  返回对象类型 
<type  '  int  ' >
>>> type( '  str  '  )
 <type  '  str  ' >

(2)、转换工厂函数:

int()、long()、float()、bool()、complex(),它们都是转换成跟数字有关的函数。如:

>>>  '  111  ' 
 '  111  ' 
>>> int( '  222  '  )
 222
>>> long( '  222  '  )
 222L
>>> float( '  222  '  )
 222.0
>>> bool(1 )
True
 >>> complex(2 )
( 2+ 0j)
 >>>  bool(True)
True
 >>> bool(454 )
True
 >>>  bool(0)
False 

(3)、功能函数

有abs()返回给定参数的绝对值:

>>> abs(-3 )
 3

coerce()数据类型对两个参数进行转换函数:

>>> coerce(1,2 )
( 1, 2 )
 >>> coerce(1,-2 )
( 1, -2 )
 >>> coerce(1,123L )
( 1L, 123L )
 >>> coerce(1.3,123L )
( 1.3, 123.0 )
 >>> coerce(1j,123L )
( 1j, (123+0j))

divmod()通过取余,返回商和余数的元祖:

>>> divmod(10,2 )
( 5 , 0)
 >>> divmod(10,3 )
( 3, 1)

pow()和**都可以进行指数运算:

>>> 5**2
25
>>> pow(5,2 )
 25

round()四舍五入:

>>> round(3 )
 3.0
>>> round(3.45 )
 3.0
>>> round(3.999999,1 )
 4.0

更多内建函数见Python官网文档。

作者: BeginMan

出处: http://www.cnblogs.com/BeginMan/

提示: 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 ⊙﹏⊙b..坚持

 

分类:  Python入门基础

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于Python入门笔记3的详细内容...

  阅读:49次