python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)


Posted in Python onDecember 08, 2013

一、变量和表达式

>>> 1 + 1               
2
>>> print 'hello world' 
hello world
>>> x = 1               
>>> y = 2
>>> x + y
3

Python是强类型语言,无法根据上下文自动解析转换成合适的类型。 Python是一种动态语言,在程序运行过程中,同一个变量名在运行的不同阶段可以代表不同形式的值(整型,浮点,列表,元组),变量名只是各种数据及对象的引用。C语言中的变量名是用来存放结果的内存片段。

1、在Python中是通过对象的引用而不是值来赋值给变量的。

2、赋值操作符主要是"=",同时也可使用增量赋值,如 x+=1。但是没有自增、自减操作符。

3、在C语言中,赋值语句可以当作表达式(可以返回值),但是在Python中赋值语句不会返回值,如下面的就是非法的:

>>> x=1
>>> y=(x=x+1)

SyntaxError: invalid syntax
以 #! 开头的称为组织行,这行告诉你的Linux/Unix系统当你执行你的程序的时候,它应该运行哪个解释器。例如:#!/usr/bin/python

以 # 开头的称为注释行。

二、条件语句

控制流语句:通过使用or,and,not关键字可以建立任意的条件表达式

if-elif-else:(Python 没有 switch-case 语句,可以通过 if 语句配合字典完成同样的工作)

if something == 1:    
    doSomething1()
elif something == 2:    
    doSomething2()
else:    
    pass # 表示一个空的块或者是空的主体,使用pass语句
while-else:
while something:    
    doSomething1()
else:    
    doSomething2()
for-else:
for i in range(1, 10, 2):   # i 值从 1 到 10,步长为2
    print i
else:
    print 'The for loop is over'

break 和 continue:用于中断和继续循环。

三、文件的输入/输出

f=open("foo.txt")
line=f.readline()
while line:
    print line,
    line=f.readline()  #读取一行,包括换行符'\n',读到文件末尾,返回空字符串
f.close()
f=open("out.txt","w")
year=1
money=1000
while year<=5:
    money=money*(1+0.05)
    f.write("%3d %0.2f\n" % (year,money)) # print>>f,"%3d %0.2f" % (year,money)
    year+=1
f.close()
for line in f.xreadlines():
    # Do something with line

四、内建类型

4.1 None类型

None表示空对象。如果一个函数没有显示的返回一个值,None就被返回。None的bool值为false

4.2 数值类型

Python有4种数值类型:整数、长整数、浮点数和复数。所有数值类型都是不可变类型。

python不支持自增自减操作符++,--,++i,其实是+(+i)的意思

运算符与表达式:基本上与其它语言相类似,只是有以下几点不同:

x*y:乘法。2 * 3得到6。'la' * 3得到'lalala'。
x**y:幂运算,返回 x 的 y 次幂。
x/y:x 除以 y,4/3得到1(整数的除法得到整数结果)。4.0/3或4/3.0得到1.3333333333333333。
x//y:取整除。返回商的整数部分。4 // 3.0得到1.0。
除法//:地板除在任何时候都会将小数部分舍为0
-x  改变x的符号位

4.3 字符串
字符串:单引号(‘)和双引号(")的作用相同,只能创建单行字符串。转义符是(\)。

三引号(如:'''或者""")之间的一切都是字符串的内容。

自然字符串:在字符串前加R(或r)指示某些不需要如转义符那样的特别处理的字符串,如:print R“Hello\n World”,将直接输出“Hello\n World”而不会出现换行的情况。

a="hello world"
b=a[0,5]            # b="hello"
c=a+" I love you"   # c="hello world I love you"
s="The value of x is "+ str(x)

获得子串: s[i:j],返回 s 从i到j(不包括j)之间的子串。若i省略则i=0,若j省略则j=len(s)-1

str() repr() 函数或者向后的引号(`)可以将其他类型的数据转换为字符串。

Unicode字符串:在字符串前加U(或u)。如 a=u'hello',每个字符用16位来表示 "hello" 'world'会被自动连接为一个字符串"helloworld" ,"s1" u"s2"就会产生u"s1s2"

字符串、Unicode字符串及tuple是不可变的序列。

4.4 列表和元组(list & tuple)

列表和元组是任意对象的序列,支持的常用操作:

len()
append()
insert(index,aMember)
list[index]=aNewMember

一个元素的元组:a=(12,)  #注意一定要个额外的逗号!
对于tuple中的元素,不可以修改,也不可以添加
列表是可变的序列,允许插入,删除,替换元素等操作

可变序列支持的操作:

s[i]=v
s[i:j]=t    # t要是个序列
del s[i]
del s[i:j]

4.5 字典

字典就是一个关联数组(或称为哈希表),是一个通过关键字索引的对象集合。

使用{}来创建一个字典

a={
    "username":"loo"
    "home":"/home/loo"
    "uid":500
  }
u=a["username"]            #访问
a["username"]="lu"         #修改
a["shell"]="/usr/bin/tcsh" #添加
del a["shell"]             #删除
len(a)                     #元素个数
a[("loo",123)]="abc"

字典的key是不能修改的对象(比如数字和tuple)。

五、循环

for i in range(1,5):
    print "2 to the %d power is %d" % (i,2**i)

内建函数range([i,]j[,stride])建立一个列表,参数i和参数stride是可选的,默认分别为0和1。
a=range(5,1,-1)   # a=[5,4,3,2]
s="hello world"
for c in s:       # 打印每个字符   
    print c

range()函数在内存中建立一个列表,当需要一个很大的列表时候,这个占内存且耗时间,为了克服这个缺点,python提供了xrange()。xrange()函数只在需要的时候才临时计算提供值,大大节省了内存。

六、函数

def say(message, times = 1):  # time 的默认参数值是 1
    print message * times   
    return time               # 无返回值的函数可省掉 return,等同于return None
只有在形参表末尾的那些参数可以有默认参数值,即你不能在声明函数形参的时候,先声明有默认值的形参而后声明没有默认值的形参。这是因为赋给形参的值是根据位置而赋值的。例如,def func(a, b=5)是有效的,

但是def func(a=5, b)是无效的。

global a  # 获得全局变量a

用户自定义函数:

def foo(x,y):
    print '%s+%s is %s' % (str(x),str(y),str(x+y))
bar=foo
bar(3,4)
d={}
d['callback']=foo
d['callback'](3,4)     # 调用foo

用户自定义函数有如下属性:

f.__module__                        #函数所在的模块名
f.__doc__ 或者 f.func_doc       #文档字符串
f.__name__ 或者 f.func_name #函数名
f.__dict__ 或者 f.func_dict      #支持任意函数属性的函数名字空间
f.func_code                          #编译后产生的字节码
f.func_defaults                     #包含所有默认参数的元组
f.func_globals                      #函数所在的模块的全局名称空间的字典
f.func_closure                     #None or a tuple of cells that contain bindings for the function's free variables.

七、类

class Stack(object):
    def __init__(self):
        self.stack=[]
    def push(self,object):
        self.stack.append(object)
    def pop(self):
        return self.stack.pop()
    def length(self):
        return len(self.stack)
s=Stack()
s.push("Dave")
s.push(42)
s.push([3,4,5])
print s.length()
print s.pop()
y=s.pop()
print y
del s

类方法的定义:

# 静态方法:
class AClass(object):
    @staticmethod
    def astatic():
            print 'a static method'
# 类方法:
class ABase(object):
    @classmethod
    def aclassmethod(cls):

isinstance(s,C) 用于测试s是否是C或是C的子类的实例
issubclass(A,B) 用于测试A是否是B的子类

八、异常

用try和except语句来捕获异常:

try:
    f=open("file.txt","r")
except IOError,e:
    print e
except TypeError,e:
    print e
...
try:
    do something
except:
    print 'An error occurred'

如果有IOError异常,就将错误原因放置在对象e中,然后运行except代码块,如果发生其他类型的异常就将控制权转到处理该异常的except的代码块,如果没找到该代码块,程序将终止运行,若没有发生异常,except代
码会被忽略掉。

九、模块

import 模块名
import 模块名 as 别名
from 模块 import 对象(函数)
from 模块 import *
内建函数dir()可以列出一个模块中的所有可访问的内容
可以被import导入的模块:
1.使用python写的程序(.py程序)
2.C或C++扩展(已编译的共享库或DLL)
3.包(包含多个模块)
4.内建模块(使用C写的并已链接到python解释器内)

十、引用与副本(引用计数)

python中的一切数据都是对象。
对于可变对象,改变一个引用就等于改变了该对象的所有的引用:

a=[1,2,3,4]
b=a
b[2]=100
print a   # a=[1,2,100,4]

为了避免这种情况,你需要创建一个可变对象的副本,然后对该副本进行操作。

两种创建可变对象的副本:

(1)浅拷贝(shallow copy):创建一个新对象,但它包含的子元素仍然是原来对象子元素的引用:

b=[1,2,[3,4]]
a=b[:]
a.append(100)
print b       # b=[1,2,[3,4]] b没有变
a[0]=100
print b       # b=[1,2,[3,4]] b没有变
a[2][0]=100
print b       # b=[1,2,[100,4]] b被改变了

(2)深拷贝(deep copy)

import copy
b=[1,2,[3,4]]
a=copy.deepcopy(b)

__del__()在对象销毁时调用。 del x 只是减少对象x的引用计数,并不调用这个函数。

十一、类型转换

int(x[,base])   #转换为int
long(x[,base])
float(x)
tuple(x)
list(x)
chr(x)        #转换为字符 
unichr(x)     #转换为Unicode字符 
ord(x)        #字符转换为整数值   
str(x)
a=[1,2,3,4]
s=repr(a)   # s='[1,2,3,4]'  也可以使用 s='a'
b=eval(s)   # b=[1,2,3,4]    再转换成一个列表
eval('3+4')
f=open("foo")
a=repr(f)  # a="<open file 'foo',mode 'r' at dc030>"

十二、其他

文档字符串DocStrings: 如果一个模块、类、函数体的第一个语句是未命名的字符串,改字符串就自动成为该对象的文档字符串 说白了就是类似于JavaDoc的东西。

文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。可以使用__doc__(注意双下划线)调用函数的文档字符串属性(属于函数的名称)。Python把每一样东西都作为对象,包括这个函数。

Python中的help(),它所做的只是抓取函数的__doc__属性,然后整洁地展示给你。

自动化工具也可以以同样的方式从你的程序中提取文档。随Python发行版附带的pydoc命令,与help()类似地使用DocStrings。

def printMax(x, y):
    '''Prints the maximum of two numbers.''' # 这里是文档字符串 
    print "DocStrings"                       # 这里是函数体命令行参数
>>>print printMax.__doc__
Prints the maximum of two numbers.

id(a)可以查看该对象的标识(当前的实现是该对象在内存中的位置)
if type(a) is type(b):
    print 'a and b have the same type'
if type(a) is types.ListType
    print 'Is a list'

isinstance(s,C) 用于测试s是否是C或是C的子类的实例
import types
isinstance(3,types.IntType)  #返回True

x==y 比较x和y的值是否相等
x is y 和x is not y 比较x和y在内存中是否指向同一个对象
Python 相关文章推荐
python刷投票的脚本实现代码
Nov 08 Python
详解python分布式进程
Oct 08 Python
Python实现深度遍历和广度遍历的方法
Jan 22 Python
Python类的继承用法示例
Jan 31 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
windows下Python安装、使用教程和Notepad++的使用教程
Oct 06 Python
Python调用graphviz绘制结构化图形网络示例
Nov 22 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
Apr 08 Python
一文详述 Python 中的 property 语法
Sep 01 Python
selenium自动化测试入门实战
Dec 21 Python
python爬虫scrapy框架之增量式爬虫的示例代码
Feb 26 Python
python socket网络编程步骤详解(socket套接字使用)
Dec 06 #Python
python3图片转换二进制存入mysql
Dec 06 #Python
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
Dec 06 #Python
python多线程编程方式分析示例详解
Dec 06 #Python
树莓派中python获取GY-85九轴模块信息示例
Dec 05 #Python
python线程锁(thread)学习示例
Dec 04 #Python
pyv8学习python和javascript变量进行交互
Dec 04 #Python
You might like
[原创]PHP中通过ADODB库实现调用Access数据库之修正版本
2006/12/31 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
php重定向的三种方法分享
2012/02/22 PHP
php自动获取关键字的方法
2015/01/06 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
屏蔽script注入小例子
2013/11/12 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
Python日志模块logging简介
2015/04/13 Python
python实现简单爬虫功能的示例
2016/10/24 Python
python如何实现异步调用函数执行
2019/07/08 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
pytorch 实现删除tensor中的指定行列
2020/01/13 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
国际象棋商店:The Chess Store
2018/07/09 全球购物
美国轮胎网站:Priority Tire
2018/11/28 全球购物
加拿大鞋网:Globo Shoes
2019/12/26 全球购物
Haggar官网:美国男装品牌
2020/02/16 全球购物
汉语言文学毕业生求职信
2013/10/01 职场文书
市场营销管理毕业生自荐信
2014/03/03 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
励志演讲稿大全
2014/08/21 职场文书
领导干部考核评语
2015/01/04 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书
劳动保障事务所个人工作总结
2015/08/12 职场文书
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android