Python2 - 基础2 - 数据类型和模块

时间:2024-08-24 14:03:20

一、数据类型

标准数据类型(5):

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

其中数字类型有4种:

  • 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也不会导致严重后果了。
    • 长整型也可以使用小写 l,但是还是建议您使用大写 L,避免与数字 1 混淆。Python使用 L 来显示长整型。
  • float(浮点型)
    • 浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号
  • complex(复数)
    • Python 还支持复数,复数由实数部分和虚数部分构成,可以用 a + bj,或者 complex(a,b) 表示, 复数的实部 a 和虚部 b 都是浮点型。

关于String(字符串)类型:

  • 字符串或串(String)是由数字、字母、下划线组成的一串字符。
  • 加号(+)是字符串连接运算符,星号(*)是重复操作。
str = 'Hello World!'

print str           # 输出完整字符串
print str[0] # 输出字符串中的第一个字符
print str[2:5] # 输出字符串中第三个至第五个之间的字符串
print str[2:] # 输出从第三个字符开始的字符串
print str * 2 # 输出字符串两次
print str + "TEST" # 输出连接的字符串

实例(Python 2.0+)

关于List(列表)类型:

  • List(列表) 是 Python 中使用最频繁的数据类型。
  • 列表用 [ ] 标识,是 python 最通用的复合数据类型。
  • 列表中值的切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾。
  • 加号 + 是列表连接运算符,星号 * 是重复操作。如下实例:
list = [ 'runoob', 786 , 2.23, 'john', 70.2 ]
tinylist = [123, 'john'] print list # 输出完整列表
print list[0] # 输出列表的第一个元素
print list[1:3] # 输出第二个至第三个元素
print list[2:] # 输出从第三个开始至列表末尾的所有元素
print tinylist * 2 # 输出列表两次
print list + tinylist # 打印组合的列表

实例(Python 2.0+)

关于Tuple(元组)类型:

  • 元组是另一个数据类型,类似于List(列表)。
  • 元组用"()"标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。
tuple = ( 'runoob', 786 , 2.23, 'john', 70.2 )
tinytuple = (123, 'john') print tuple # 输出完整元组
print tuple[0] # 输出元组的第一个元素
print tuple[1:3] # 输出第二个至第三个的元素
print tuple[2:] # 输出从第三个开始至列表末尾的所有元素
print tinytuple * 2 # 输出元组两次
print tuple + tinytuple # 打印组合的元组

Python实例

注意:元组是不允许更新的。而列表是允许更新的:

tuple = ( 'runoob', 786 , 2.23, 'john', 70.2 )
list = [ 'runoob', 786 , 2.23, 'john', 70.2 ]
tuple[2] = 1000 # 元组中是非法应用
list[2] = 1000 # 列表中是合法应用

关于Dictionary(字典)类型:

  • 字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象集合,字典是无序的对象集合。
  • 两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
  • 字典用"{ }"标识。字典由索引(key)和它对应的值value组成。
dict = {}
dict['one'] = "This is one"
dict[2] = "This is two" tinydict = {'name': 'john','code':6734, 'dept': 'sales'} print dict['one'] # 输出键为'one' 的值
print dict[2] # 输出键为 2 的值
print tinydict # 输出完整的字典
print tinydict.keys() # 输出所有键
print tinydict.values() # 输出所有值

Python 实例

Python数据类型转换

数据类型的转换,只需要将数据类型作为函数名即可。

以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。

int(x [,base])

将x转换为一个整数

long(x [,base] )

将x转换为一个长整数

float(x)

将x转换到一个浮点数

complex(real [,imag])

创建一个复数

str(x)

将对象 x 转换为字符串

repr(x)

将对象 x 转换为表达式字符串

eval(str)

用来计算在字符串中的有效Python表达式,并返回一个对象

tuple(s)

将序列 s 转换为一个元组

list(s)

将序列 s 转换为一个列表

set(s)

转换为可变集合

dict(d)

创建一个字典。d 必须是一个序列 (key,value)元组。

frozenset(s)

转换为不可变集合

chr(x)

将一个整数转换为一个字符

unichr(x)

将一个整数转换为Unicode字符

ord(x)

将一个字符转换为它的整数值

hex(x)

将一个整数转换为一个十六进制字符串

oct(x)

将一个整数转换为一个八进制字符串

二、Python模块

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

Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。

使用模块可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中

模块分为三种:

  • 内置模块:如sys, os, subprocess, time, json 等等
  • 自定义模块:自定义模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。
  • 开源模块:公开的第三方模块, 如 https://pypi.python.org/pypi 。可以使用pip install 安装,类似于yum 安装软件

>>> help('modules')

查看python所有的modules

import语句

模块定义好后,我们可以使用 import 语句来引入模块,语法如下:

import module1[, module2[,... moduleN]

在调用模块中的函数时,必须这样引用:  模块名.函数名

当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。一般会先在当前目录下寻找,如果找不到会去\Python\Python36\Lib\site-packages下寻找

搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块 ,需要把import命令放在脚本的顶端     一个模块只会被导入一次,不管你执行了多少次import。

From...import语句

Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:

from modname import name1[, name2[, ... nameN]]

例如,要导入模块 fib 的 fibonacci 函数,使用如下语句:

from fib import fibonacci

这个声明不会把整个 fib 模块导入到当前的命名空间中,它只会将 fib 里的 fibonacci 单个引入到执行这个声明的模块的全局符号表。

From...import*语句

把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:

from modname import *

import...as...

import A as B  #相当于给予A库一个B的别称,帮助记忆;调用该库时可用别称代替

内置模块举例:

系统相关的信息模块: import sys

sys.argv 是一个 list,包含所有的命令行参数.   也打印出了相对路径,在pycharm中是绝对路径
sys.stdout sys.stdin sys.stderr 分别表示标准输入输出,错误输出的文件对象.
sys.stdin.readline() 从标准输入读一行 sys.stdout.write("a") 屏幕输出a
sys.exit(exit_code) 退出程序
sys.modules 是一个dictionary,表示系统中所有可用的module
sys.platform 得到运行的操作系统环境
sys.path 是一个list,指明所有查找module,package的路径.

操作系统相关的调用和操作: import os

os.environ 一个dictionary 包含环境变量的映射关系
os.environ["HOME"] 可以得到环境变量HOME的值
os.chdir(dir) 改变当前目录 os.chdir('d:\\outlook')
注意windows下用到转义
os.getcwd() 得到当前目录
os.getegid() 得到有效组id os.getgid() 得到组id
os.getuid() 得到用户id os.geteuid() 得到有效用户id
os.setegid os.setegid() os.seteuid() os.setuid()
os.getgruops() 得到用户组名称列表
os.getlogin() 得到用户登录名称
os.getenv 得到环境变量
os.putenv 设置环境变量
os.umask 设置umask
os.system(cmd) 利用系统调用,运行cmd命令 执行命令不保存结果 返回值如果是0,代表执行成功
os.mkdir("目录名") 在当前目录新建一个目录
print(sys.path)
print(sys.argv) #打印路径以及变量列表
cmd_res = os.system("dir") #执行命令不保存结果 返回值如果是0,代表执行成功
cmd_res = os.popen("dir").read() #可保存结果
print(cmd_res) os.mkdir("new_dir") #在当前目录下新建一个new_dir目录

Python3 内置模块实例

内置模块(不用import就可以直接使用)常用内置函数:

help(obj) 在线帮助, obj可是任何类型
callable(obj) 查看一个obj是不是可以像函数一样调用
repr(obj) 得到obj的表示字符串,可以利用这个字符串eval重建该对象的一个拷贝
eval_r(str) 表示合法的python表达式,返回这个表达式
dir(obj) 查看obj的name space中可见的name
hasattr(obj,name) 查看一个obj的name space中是否有name
getattr(obj,name) 得到一个obj的name space中的一个name
setattr(obj,name,value) 为一个obj的name
space中的一个name指向vale这个object
delattr(obj,name) 从obj的name space中删除一个name
vars(obj) 返回一个object的name space。用dictionary表示
locals() 返回一个局部name space,用dictionary表示
globals() 返回一个全局name space,用dictionary表示
type(obj) 查看一个obj的类型
isinstance(obj,cls) 查看obj是不是cls的instance
issubclass(subcls,supcls) 查看subcls是不是supcls的子类 ################## 类型转换 ################## chr(i) 把一个ASCII数值,变成字符
ord(i) 把一个字符或者unicode字符,变成ASCII数值
oct(x) 把整数x变成八进制表示的字符串
hex(x) 把整数x变成十六进制表示的字符串
str(obj) 得到obj的字符串描述
list(seq) 把一个sequence转换成一个list
tuple(seq) 把一个sequence转换成一个tuple
dict(),dict(list) 转换成一个dictionary
int(x) 转换成一个integer
long(x) 转换成一个long interger
float(x) 转换成一个浮点数
complex(x) 转换成复数
max(...) 求最大值
min(...) 求最小值

自定义模块

简单点,一个模块就是一个 Python 文件,就是一个 .py

自定义一个模块,就是自己写一个具备某种功能的python文件;导入模块也就是 import python文件名

导入一个模块有以下几种可能和办法:

  1. 如果导入的模块和主程序在同个目录下,直接import就行了
  2. 若不在同一目录,可以将这个文件放到\Python\Python36\Lib\site-packages目录下,再import
  3. 如果导入的模块是在主程序所在目录的子目录下,可以在子目录中增加一个空白的__init__.py文件,该文件使得python解释器将子目录整个也当成一个模块,然后直接通过“import 子目录.模块”导入即可。
  4. 如果导入的模块是在主程序所在目录的父目录下,则要通过修改path来解决,有两种方法:
    • 通过”import sys,sys.path.append('父目录的路径')“来改变,这种方法属于一次性的,只对当前的python解释器进程有效,关掉python重启后就失效了。
    • 直接修改环境变量:在windows中是 “ set 变量=‘路径’  ” 例如:set PYTHONPATH=‘C:\test\...’ 查看是否设置成功用echo %PYTHONPATH%,而且进到python解释器中查看sys.path,会发现已经有了新增加的路径了。这 种方式是永久的,一次设置以后一直都有效。在linux中是 "export 变量=‘路径’ “,查看是" echo $变量 "

      通过修改path是通用的方法,因为python解释器就是通过sys.path去一个地方一个地方的寻找模块的。