python数据类型2

1、Python标准数据类型

5个标准数据类型:

  • Numbers(数字)
  • String(字符串)
  • Tuple(元组)
  • List(列表)
  • Dictionary(字典)

1.1 Numbers(数字)

Python支持四种不同的数字类型:

  • int(有符号整型)
  • long(长整型[也可以代表八进制和十六进制])
  • float(浮点型)
  • complex(复数)

1.2 String(字符串)

字符串或串(String)是由数字、字母、下划线组成的一串字符。
字符串用" "标识,一般记为 : s="a1a2···an"(n>=0)

1.3 Tuple(元组)

元组用( )标识。
元组是另一个数据类型,类似于List(列表)。
内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。

1.4 List(列表)

列表用 [ ] 标识,是 python 最通用的复合数据类型、使用最频繁的数据类型。
列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。

列表中值的切割,用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾。

加号 + 是列表连接运算符,星号 * 是重复操作。

1.5 Dictionary(字典)

字典用{ }标识。字典由索引(key)和它对应的值value组成。

字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。
列表是有序的对象结合,字典是无序的对象集合。
两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。


2、可更改(mutable)与不可更改(immutable)对象

strings, tuples, numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。

  • 不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。
i=8
i+=2 #计算i+8,得到结果存储在新的空间,将i重新绑定到这个新的int对象;如果之前的对象没有其他对象引用,则进入垃圾回收
i=88
j=88
print(i is j) #True

字符串(string)与int类似,+=时,会创建一个新的字符串,对象引用将重新绑定到新的字符串。

  • 可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

列表(list)是可变的,+=后,原始的列表对象会被修改(在后面加一个字符?)没有重新绑定。

python 函数的参数传递

  • 不可变类型
    类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

  • 可变类型
    类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。


身份操作符 is
is 左端的对象引用与右端引用指向同一对象时,返回true,否则false。
eg:
a='someThing'
b=None
a is not None # True
b is None # True

list ,索引从0开始;str的索引是从1开始。(python3.3)
参数在Python里都是按引用传递。
如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。
例如:
def changeme( mylist ):
mylist.append([1,2,3,4]);
print(mylist)
return

mylist = [10,20,30];
changeme( mylist );
print (mylist )
[10, 20, 30, [1, 2, 3, 4]]
[10, 20, 30, [1, 2, 3, 4]]


必备参数(最一般的情况)
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
命名参数
命名参数和函数调用关系紧密,调用方用参数的命名确定传入的参数值。你可以跳过不传的参数或者乱序传参,因为Python解释器能够用参数名匹配参数值。
printme( str = "My string");
缺省参数
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。
def printinfo( name, age = 35 ):
print( "Name: ", name)
print( "Age ", age)
return
printinfo( age=50, name="miki" );
printinfo( name="miki" );
变量和局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
total = 0; #全局 global
def sum( arg1, arg2 ):
total = arg1 + arg2;# 局部
print ("Inside the function local total : ", total)
return total
sum( 10, 20 );#30
print ("Outside the function global total : ", total )#0
列表与元组:
列表与元组不是真正的存储数据项,而是存放对象的引用。

posted @ 2017-06-25 12:42  clq.lib  阅读(212)  评论(0编辑  收藏  举报