C语言老司机学Python (二)

时间:2022-12-01 06:02:10

标准数据类型:

共6种:Number(数字),String(字符串),List(列表),Tuple(元组),Sets(集合),Dictionary(字典)

本次学习主要是和数据类型混个脸熟,知道每样东西干什么的,有什么特点。具体用法和数据类型的方法,查工具书就行。

排好队,一个一个来。

数字:

比C简单的多,数字只有4种类型,分别是 int, float, bool, complex,纳尼?还有复数。

int就是长整型,没有c里面的短整型一说。看到了吧,随着计算机硬件的强大,过去无比宝贵的内存资源已经不稀罕了,怎么对程序员方便友好怎么来,这也是现代语言的一个基本设计思想。

用type()和isinstance()都可以得知某个变量所指向的对象的类型。区别是,type()比较死脑筋,但是isinstance()会认为子类是一种父类类型。即:isinstance(子类型) == 父类型 会返回True

既然提到了True和False,就说一下,Python3里,True和False是关键字,值分别是1和0。你可以试着print(True+1),结果是2。

数值运算符方面,大部分和c很像,少部分的不一样,确切的说,是更便利了。比如2/4的结果是0.5,Python会自动按浮点数计算。这样写在c里面就等于0了,要想得到0.5还得强制转换类型。那么,如果就是要取整怎么办,可以写成 2//4,结果是0。 //作为运算符,也决定了不能像c里面一样用它做单行注释。

乘方是 a**b,不需要像c一样调用另外的函数库。

字符串:

字符串用单引号(')或双引号(")括起来。我喜欢单引号,因为不用按shift,便捷高效。

按照老规矩, \表示转义,如果在字符串前加大写或者小写的R,就不再转义。

字符串连接用+号,复制字符串N次用*号。

字符串截取用 变量[下标1,下标2]的形式,下标索引从0开始,末尾位置记为-1,是个左闭右开的区间,[ )。

示例速查:

str = 'Runoob'

print (str) # 输出字符串 Runoob
print (str[0:-1]) # 输出第一个到倒数第二个的所有字符 Runoo
print (str[0]) # 输出字符串第一个字符 R
print (str[2:5]) # 输出从第三个开始到第五个的字符 noo
print (str[2:]) # 输出从第三个开始的后的所有字符 noob
print (str * 2) # 输出字符串两次 RunoobRunoob
print (str + "TEST") # 连接字符串 RunoobTEST

不能给字符串中的单个字符赋值, str[1]='a'会出错。

另外,Python没有c语言的字符类型char。

完全可以理解。之前说了,什么时代了,还省啥内存啊,怎么方便怎么来。

列表:

列表的定义是 listA = [x, xx,xxx] ,方括号包起,逗号隔开,乍看起来像c语言里的数组,但其实不一样。从append()、pop()等方法来看,又像是java里面的数组。我姑且认为Python里面的列表是一种混合动力加强版的数组吧,可操纵性简直逆天。看例子:

list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]
tinylist = [123, 'runoob']

print (list) # 输出完整列表 ['abcd', 786, 2.23, 'runoob', 70.2]
print (list[0]) # 输出列表第一个元素 abcd
print (list[1:3]) # 从第二个开始输出到第三个元素 [786, 2.23]
print (list[2:]) # 输出从第三个元素开始的所有元素 [2.23, 'runoob', 70.2]
print (tinylist * 2) # 输出两次列表 [123, 'runoob', 123, 'runoob']
print (list + tinylist) # 连接列表 ['abcd', 786, 2.23, 'runoob', 70.2, 123, 'runoob']

和字符串不能改变其中的元素不同,列表里面的可以改,而且简直是随便改,不要太方便。

a = [9, 2, 13, 14, 15, 6]
a[2:5] = [] # 将对应的元素值设置为 []
print(a) # 结果是 [9, 2, 6]

元组(Tuple)

此物老夫从未见过。特地去搜索了一下,Tuple这个词似乎是Python特有的,不像list之类的词在生活中还有别的含义。只好认真看教程了。

教程里解释:

元组写在小括号(())里,元素之间用逗号隔开,只有一个元素时,唯一的元素后面要加逗号。

元组(tuple)与列表类似,不同之处在于元组的元素不能修改。

类似列表?行了,翻页。

集合:

存放无序不重复元素的序列,用于进行成员关系测试和删除重复元素。

重点:1)无序;2)不重复。

用{}或者 set() 函数创建集合。 setA = {'hatemath'} 或者 setA = set('hatemath')

注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

常见集合运算有:并集 |, 差集 - ,交集&, 不同时存在的元素集 ^ (按我理解就是并集减去交集)

例子:

a = set('hate')
b = set('math')

print(a | b)      # {'t', 'm', 'a', 'e', 'h'}
print(a - b)      # {'e'}
print(a & b)      # {'a', 't', 'h'}

print(a ^ b)      # {'m', 'e'}
print( (a | b) - (a & b))      # {'e', 'm'} 果然就是我理解的意思。

集合,很好很强大。再见。

肚子饿了。。。15年前初学编程的时候,经常去计算中心上机,为了debug经常错过饭点,而且把零钱用光了。下机后跑去跟老板赊账吃饭(此处应该有个笑哭的表情)。过了这么多年还是喜欢编程,看来是真爱。

也有可能是因为我没把它当做谋生的手段。

字典:

字典是无序对象的集合,其中的元素时通过键(key)来存取的,取出来的叫值(value)。眼熟!java里面有这个玩意。我发现学这些高级特性的时候,跟c基本没啥关系了。。。。

既然是熟人,就直接看例子吧。

dict = {}
dict['one'] = "1 - 菜鸟教程"
dict[2] = "2 - 菜鸟工具"

tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}

print (dict['one']) # 输出键为 'one' 的值        1 - 菜鸟教程
print (dict[2]) # 输出键为 2 的值             2 - 菜鸟工具
print (tinydict) # 输出完整的字典        {'name': 'runoob', 'site': 'www.runoob.com', 'code': 1}
print (tinydict.keys()) # 输出所有键     dict_keys(['name', 'site', 'code'])
print (tinydict.values()) # 输出所有值  dict_values(['runoob', 'www.runoob.com', 1])