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读取键盘输入的2种方法
Jun 16 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
Jun 07 Python
Python之dict(或对象)与json之间的互相转化实例
Jun 05 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
Jun 13 Python
Python分布式进程中你会遇到的问题解析
May 28 Python
python 实现交换两个列表元素的位置示例
Jun 26 Python
python实现图片九宫格分割
Mar 07 Python
关于Python内存分配时的小秘密分享
Sep 05 Python
python getopt模块使用实例解析
Dec 18 Python
python tkinter之 复选、文本、下拉的实现
Mar 04 Python
Python tkinter制作单机五子棋游戏
Sep 14 Python
Pytest中skip和skipif的具体使用方法
Jun 30 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语法(1)
2006/10/09 PHP
php接口与接口引用的深入解析
2013/08/09 PHP
php打印输出棋盘的实现方法
2014/12/23 PHP
php常用正则函数实例小结
2016/12/29 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
js弹性势能动画之抛物线运动实例详解
2017/07/27 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
Python中统计函数运行耗时的方法
2015/05/05 Python
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
浅谈Pytorch中的torch.gather函数的含义
2019/08/18 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
python中字符串的编码与解码详析
2020/12/03 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
Python如何实现单例模式
2016/06/03 面试题
办公室主任岗位职责
2013/11/08 职场文书
一份报关员的职业规划范文
2014/01/08 职场文书
银行办理业务介绍信
2014/01/18 职场文书
大学生通用个人的自我评价
2014/02/10 职场文书
餐厅执行经理岗位职责范本
2014/02/26 职场文书
唐山大地震的观后感
2015/06/05 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
Django模型层实现多表关系创建和多表操作
2021/07/21 Python
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技