python之路2:数据类型

  1. 模块

  2. 数据类型

  3. 数据运算

 

一、模块

Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持。 

sys

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
print(sys.path)
print(sys.argv)
 
#输出
$ python test.py helo world
['test.py''helo''world']  #把执行脚本时传递的参数获取到了

  

os

1
2
3
4
5
6
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
#cmd_res=os.system('dir') #执行命令只输出,不保存结果
cmd_res2=os.popen('dir').read()
#print(cmd_res)
print(cmd_res2)
 

完全结合一下  

1
2
3
import os,sys
 
os.system(''.join(sys.argv[1:])) #把用户的输入的参数当作一条命令交给os.system来执行

 

自己写个模块 

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# info.py

name = input('name:')
age = int(input('age:'))#integer
print(type(age),type(str(age)))
job = input('job:')
salary = int(input('salary:'))

info = '''
------------ info of %s -----------
Name: %s
Age: %d
Job: %s
salary: %d
''' % (name,name,age,job,salary)

print(info)

info2 = '''
-------- info of {_name} --------
Name:{_name}
Age:{_age}
Job:{_job}
Salary:{_salary}
'''.format(_name=name,_age=age,_job=job,_salary=salary)

print(info2)

info3 ='''
--------- info of {0} ---------
Name:{0}
Age:{1}
Job:{2}
Salary:{3}
'''.format(name,age,job,salary)

print(info3)

然后在python的sys.path路径下就可以导入。python文件也是模块。 

 

二、数据类型

1、数字

  1 是一个整数。它是一个字面意义上的常量,因为不能改变它的值。

int(整型)

在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

long(长整型)
  跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。

  注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
float(浮点型)

  浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。

complex(复数)

  复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
注:Python中存在小数字池:-5 ~ 257

  

 

2、布尔值

  True或False

  1 或 0

3、字符串(不可变)

  字符串是 字符的序列 。字符串基本上就是一组单词。单词可以是英语或其 它由 Unicode 标准支持的语言。

  "hello world"

万恶的字符串拼接:
  python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。

● 使用单引号(')
你可以用单引号指示字符串,就如同'Quote me on this'这样。所有的空白,即空格和制 表符都照原样保留。
● 使用双引号(")
在双引号中的字符串与单引号中的字符串的使用完全相同,例如"What's your name?"。
● 使用三引号('''或""")
利用三引号,你可以指示一个多行的字符串。你可以在三引号中自由的使用单引号和双 引号。

 字符串格式化输出

1
2
3
4
name = "alex"
print "i am %s " % name
  
#输出: i am alex

PS: 字符串是%s;整数%d;浮点数%f。

format 方法 

#!/usr/bin/python
# Filename: str_format.py
age = 25
name = 'Swaroop' 
print('{0} is {1} years old'.format(name, age))
print('Why is {0} playing with that python?'.format(name))

 $ python str_format.py

Swaroop is 25 years old

Why is Swaroop playing with that python?

 操作实例:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: lvlibing

name = 'biLlYLV'
print(name.isidentifier()) #检测一段字符串可否被当作标志符,即是否符合变量命名规则
print(name.capitalize()) #首字母大写,后面的其它字母都小写
print(name.casefold()) #大写全部变小写
print(name.center(80,'-')) #以biLlYLV为中心生成80个字符,不够的以-来补全。
print(name.count('l')) #统计l出现次数
print(name.startswith('b'))
print(name.endswith('V')) #判断字符串是否以V结尾
print(name.find('i')) #返回在其中找到子字符串的最低索引
print(name.index('i')) #返回i所在字符串的索引
print(name.lower()) #所有小写
print(name.upper()) #所有大写
print(name.swapcase())#大小写互换
print('HI,'+name) #字符串拼接

message = 'my name is {0} , city is {1}'
print(message.format('lv','wh'))
joins = "|".join(['alex','jack','rain'])
print(joins)

  查看帮助:

 

4、列表

list 是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项 目。

列表中的项目应该包括在方括号中,这样 Python 就知道你是在指明一个列表。 一旦你创建了一个列表,你可以添加、删除或是搜索列表中的项目。由于你可以增加 或删除项目,我们说列表是可变的数据类型,即这种类型是可以被改变的。

创建列表:
1
2
3
name_list = ['alex''seven''eric']
name_list = list(['alex''seven''eric'])

基本操作:

  • 索引
  • 切片
  • 追加
  • 删除
  • 长度
  • 切片
  • 循环
  • 包含

操作实例:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: lvlibing

import copy

names = ['0','1','2','3','4','5','6','7','8']
names.append(['a','b','c'])

#names3 = names.copy() #浅拷贝
names3 = copy.deepcopy(names) #深拷贝
print('names3',names3)
#print(names[-1][0])
names[1]='10' #改值
names[-1][0]='aa'
print(names)
print(names3)

print(names[1:]) #切片,取出从索引1开始的所有的值
print(names[1:8:2]) #切片,后面的2是代表,每隔一个元素,就取一个
names.append('100') #追加
names.insert(4,'4') #往索引4的位置插入4
names.pop(-2) #删除,不加索引,默认删除列表最后一个值
names.remove('4') #删除
names.remove('4')
names[2]='200'

names2 = ['100','200']
names.extend(names2) #把names2扩展合并到names列表
print(names)
del names2 #删除
print(names.count("0")) #统计0的个数
print(names.sort()) #排序
print(names.reverse()) #反转
print(names.index('100')) #获取(索引)下标,只返回找到的第一个下标
names.clear() #清空列表
print(names) #打印列表

  

5、元组(不可变列表)
元组用来将多样的对象集合到一起。元组和列表十分类似,只不过元组和字符串 一样是不可变的即你不能修改元组。元 组通过圆括号中用逗号分割的项目定义。 元组通常用在使语句或用户定义的函数能够安全地采用一组值的时候,即被使用 的元组的值不会改变。 
 
创建元组:
1
2
3
ages = (1122334455)
ages = tuple((1122334455))
 它只有2个方法,一个是count,一个是index。
 
6、字典(无序)
字典类似于你通过联系人名字查找地址和联系人详细情况的地址簿,即,我们把 键(名字)和值(详细情况)联系在一起。注意,键必须是唯一的,就像如果有两个 人恰巧同名的话,你无法找到正确的信息。 
注意,你只能使用不可变的对象(比如字符串)来作为字典的键,但是你可以把 不可变或可变的对象作为字典的值。基本说来就是,你应该只使用简单的对象作为 键。 
键值对在字典中以这样的方式标记:d = key1 : value1, key2 : value2 。注意它们的 键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中。 记住字典中的键/值对是没有顺序的。如果你想要一个特定的顺序,那么你应该 在使用前自己对它们排序。 
 
创建字典:
1
2
3
person = {"name""mr.wu"'age'18}
person = dict({"name""mr.wu"'age'18})

常用操作:

  • 索引
  • 新增
  • 删除
  • 键、值、键值对
  • 循环
  • 长度

操作实例:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: lvlibing


dicts = {'bj':'王府井','sh':'陆家嘴','gz':'小蛮腰','sz':'南山','zj':'杭州'}
print(dicts)
print(dicts.keys()) #获取字典的所有key
print(dicts.values()) #获取字典的所有值
print(dicts.items())#获取字典的键值对
dicts['wh']='光谷'#增加
dicts['gz']='广州塔'#修改
dicts.pop('gz')#删除
del dicts['sz']#删除
dicts.popitem()#随机删除一个
print(dicts.get('sh'))#获取键sh的值
dicts.setdefault('sc','成都') #有就不改,没有加添加
dicts.pop('bj')
info = { 0:'香港',1:'澳门',2:'台湾'} #定义字典
dicts.update(info)#字典更新合并
print(dicts)

dicts2 = dict.fromkeys([1,2,3,4,5],'城市')#通过一个列表生成默认dict
print(dicts2)

for i in dicts:
    print(i,dicts[i])

# print('---------')
# for k,v in dicts.items(): #会先把dict转成list,数据量大费时莫用
#     print(k,v)

7、集合

集合是没有顺序的不重复的简单对象的聚集。当在聚集中一个对象的存在比其顺序或者出现的次数重要时使用集合。

主要作用如下:

  • 去重:把一个列表变成集合,就自动去重了
  • 关系测试:测试两组数据之前的交集、差集、并集、成员等关系

操作实例:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: lvlibing
# __doc__ practice

set1 = set([1,2,3]) #定义一个集合
set2 = set([2,3,4]) #定义一个集合

set1.add(5)
set1.update({7,8,9})
set1.pop()
set1.remove(7)
set2.add(6)
set2.update([8,9,10])
set2.pop()
set2.remove(10)
print(set1,type(set1))
print(set2,type(set2))

print(set1 & set2)
print(set1.intersection(set2)) #交集
print(set1 | set2)
print(set1.union(set2)) #并集
print('----')
print(set1.difference(set2)) #差集
print(set1 - set2)
print(set1.symmetric_difference(set2)) #对称差集
print(set1 ^ set2)

print(set1 >= set2)
print(set1.issuperset(set2)) #超集
print(set1 <= set2)
print(set1.issubset(set2)) #子集
print(set1 in set2)
print(set2 not in set1)

s3 = set1.copy()
print(s3,type(s3))
print(len(s3),len(set1)) #集合长度

  

不可变类型有:数字、字符串、元组。

 

三、数据运算 

 技巧

你可以交互地使用解释器来计算例子中给出的表达式。例如,为了测试表达式2 + 3,使 用交互式的带提示符的Python解释器:
>>> 2 + 3

5

>>> 3 * 5

15 

 

算数运算:

比较运算:

赋值运算:

逻辑运算:

成员运算:

身份运算:

位运算:

 

#!/usr/bin/python
  
a = 60            # 60 = 0011 1100
b = 13            # 13 = 0000 1101
c = 0
  
c = a & b;        # 12 = 0000 1100
print "Line 1 - Value of c is ", c

 

  

运算符优先级:

 

三元运算

1
result = 1 if 条件 else 2

如果条件为真:result = 值1
如果条件为假:result = 值2

 

Python中字符串与字典间转换

字典和字符串转换 eval()和str()函数

myDict = eval(myStr)
myStr = str(myDict)

 

总结:

 

 

 

参考: 

http://www.cnblogs.com/alex3714

internet&python books

PS:如侵权,联我删。

posted on 2019-09-02 12:42  BillyLV  阅读(264)  评论(0编辑  收藏  举报

导航