python第三天学习笔记

Python函数进阶

默认参数:

[email protected]:~/python$vim default.func.py

#!/usr/bin/python

defname_info(name,age,job,nationnality=‘Chinese‘):

print ‘‘‘%s‘s information:

Name:   %s

Age:    %s

Job:    %s

Country:        %s ‘‘‘ %(name,name,age,job,nationnality)

name_info(‘cai‘,23,‘IT‘,‘American‘)

name_info(‘ru‘,25,‘Engineer‘)

//无输入,则默认填写Chinese。-----默认参数使用

程序运行结果:

[email protected]:~/python$python default.func.py

cai‘s information:

Name:   cai

Age:    23

Job:    IT

Country:        American

ru‘s information:

Name:   ru

Age:    25

Job:    Engineer

Country:        Chinese

关键参数:

某一函数有许多参数,而你只想指定其中一部分,则可以通过命名来为这些参数赋值。这被称作关键参数

[email protected]:~/python$vim 1.py

#!/usr/bin/python

#Filename:fun_key.py

def func(a,b=5,c=10):

print ‘a is‘,a,‘b is‘, b, ‘c is‘ , c

func(3,7)

func(25,c=24)

func(c=50,a=100)

// func(c=50,a=100)指定某参数为特定值,关键参数

运行结果:

[email protected]:~/python$python 1.py

a is 3 b is 7 c is 10

a is 25 b is 5 c is 24

a is 100 b is 5 c is 50

全局变量、局部变量

>>> def lisst(a,b=5,c=10):

...  global a

...  print "a:%s b:%s c:%s" %(a,b,c)

...

File "<stdin>", line 1

SyntaxError: name ‘a‘ is local and global

//出错,全局变量不能这样设置

>>> def lisst(a,b=5,c=10):

...  print "a:%s b:%s c:%s" %(a,b,c)

...  return a

...

>>> lisst(c=50,a=100)

a:100 b:5 c:50

100                               //return返回a的值

>>> result=lisst(c=50,a=100)           //将函数赋值给result

a:100 b:5 c:50

>>> print result                    //result为函数的返回值returna为100

100

>>> defname_info(name,age,job,nationnality=chinese):

...  global ll                    //定义一个全局变量ll(要在函数内)

...  ll=‘ddd‘

...  global age               //并不能将age定义为全局变量,该函数为在函数外

...  return ‘success‘

...  return ‘aaa‘

// globall定义一个全局变量ll(要在函数内)

//global age并不能将age定义为全局变量,该函数为在函数外(name,age,job,nationality)都不能将其定义为全局变量

//return ‘success‘    return ‘aaa‘  后一条return ‘aaa‘并未生效,一个函数只能有一个return值(return退出),要返回两个值,可改为return ‘success’,’aaa’

Pickle序列化

类似于游戏中存档,下次打开时从结束处开始(将内存的数据存入硬盘)

[email protected]:~/python$vim acc.py

#/usr/bin/python

account_info={‘0001‘:[‘cai‘,1500,1500],

‘0002‘:[‘ru‘,3000,3000],

}

[email protected]:~/python$python

>>> import acc

>>> acc.account_info                             //调用字典

{‘0001‘: [‘cai‘, 1500, 1500], ‘0002‘:[‘ru‘, 3000, 3000]}

>>> acc.account_info[‘0001‘]                      //取出0001

[‘cai‘, 1500, 1500]

>>>acc.account_info[‘0001‘][1]                  //取出1500

1500

>>>acc.account_info[‘0001‘][1]=5000            //将第一个1500改成5000

>>> acc.account_info

{‘0001‘: [‘cai‘, 5000, 1500], ‘0002‘:[‘ru‘, 3000, 3000]}

假设现要将其存入文件,退出打开文件后为修改后的5000

>>> f=open(‘acc.log‘,‘w‘)

>>>f.write(acc.account_info)              //写入失败,只能写入字符串,不能将字典写入

Traceback (mostrecent call last):

File "<stdin>", line 1, in<module>

TypeError:expected a character buffer object

>>> ‘%s‘ %acc.account_info                         //将字典变成字符串

"{‘0001‘: [‘cai‘, 5000, 1500], ‘0002‘:[‘ru‘, 3000, 3000]}"

>>> s=‘%s‘ %acc.account_info

>>> f.write(s)                           //写入

>>> f.close()

[email protected]:~/python$more acc.log         //查看写入的文件

{‘0001‘: [‘cai‘, 5000, 1500], ‘0002‘:[‘ru‘, 3000, 3000]}

假设现想把存入的数值取出怎么办,取出则很麻烦,以上为字典存入,与取出的办法非常麻烦。

现使用pickle序列化来完成

Pickle 语法dump

import pickle

account_info={‘1886’:[‘wang’,1500,1500],

‘1887’:[‘cai’,900,900],

}

f=file(‘account.pkl’,’wb’)              //打开一文件

pickle.dump(account_info,f)          //存入文件

f.close()

[email protected]:~/python$vim acc_dumpy.py

#!/usr/bin/env python

import pickle

account_info = {‘001‘:[‘wang‘,15000,15000],

‘002‘:[‘cai‘,2000,2000],

}

f=open(‘acc.pkl‘,‘w+‘)

pickle.dump(account_info,f)

f.close

[email protected]:~/python$python acc_dumpy.py

[email protected]:~/python$more acc.pkl          //已产生文件

(dp0

S‘002‘

p1

(lp2

S‘cai‘

p3

aI2000

aI2000

asS‘001‘

p4

(lp5

S‘wang‘

p6

aI15000

aI15000

as.

现取出文件

[email protected]:~/python$vim acc_load.py

#!/usr/bin/python

import pickle

f=open(‘acc.pkl‘,‘r+‘)

account_info=pickle.load(f)

print account_info

// pickle.load(f)将文件中的字典load进来,并给变量account_info,printaccount_info打印

[email protected]:~/python$python acc_load.py     //查看打印

{‘002‘: [‘cai‘, 2000, 2000], ‘001‘:[‘wang‘, 15000, 15000]}

修改内容

[email protected]:~/python$vim acc_load.py

#!/usr/bin/python

import pickle

f=open(‘acc.pkl‘,‘r+‘)

account_info=pickle.load(f)

print account_info

account_info[‘002‘][1]=16000

account_info[‘002‘][2]=16000

print account_info

[email protected]:~/python$python acc_load.py   //内容已修改

{‘002‘: [‘cai‘, 2000, 2000], ‘001‘: [‘wang‘,15000, 15000]}

{‘002‘: [‘cai‘, 16000, 16000], ‘001‘:[‘wang‘, 15000, 15000]}

//但现在只在内存中,并未存入文件

现把修改后的值存入文件:

[email protected]:~/python$vim acc_load.py

#!/usr/bin/python

import pickle

f=open(‘acc.pkl‘,‘r+‘)

account_info=pickle.load(f)

f.close()                               //防止出现写入多个字典

account_info[‘002‘][1]=16000

account_info[‘002‘][2]=16000

f=open(‘acc.pkl‘,‘w‘)

pickle.dump(account_info,f)

f.close()

//每dump一下,都需要从新写一遍,即重新打开文件一次

//查看原先的

[email protected]:~/python$python acc_dumpy.py

[email protected]:~/python$more acc.pkl

(dp0

S‘002‘

p1

(lp2

S‘cai‘

p3

aI2000

aI2000

asS‘001‘

p4

(lp5

S‘wang‘

p6

aI15000

aI15000

as.

执行后查看值已修改

[email protected]:~/python$python acc_load.py

[email protected]:~/python$more acc.pkl

(dp0

S‘002‘

p1

(lp2

S‘cai‘

p3

aI16000

aI16000

asS‘001‘

p4

(lp5

S‘wang‘

p6

aI15000

aI15000

as.

Pickle语法load

Import pickle

#load data first

pkl_file = open(‘account.pkl’,’rb’)

account_list = pickle.load(pkl_file)

pkl_file.close()

python正则表达式

import re

#将正则表达式编译成pattern对象

pattern = re.compile(r‘hello’)

#使用Pattern匹配文本,获得匹配结果,无法匹配时将返回None

match = pattern.match(‘hello world!’)

if match:

printmatch.group()

###输出###

#hello

例子:

>>> import re

>>> p = re.compile(r‘hello‘)

>>> m = p.match(‘hello,world‘)

>>> print m.group()

Hello

>>> p = re.compile(r‘he‘)               //匹配he

>>> m = p.match(‘hello,world‘)

>>> print m.group()

he

写法2,不写pattern

m = re.match(r’hello’,’hello world!’)

print m.group()

例子:

>>> m = re.match(r‘tom‘,‘tompam‘)

>>> print m.group()

tom

>>> m =re.match(r‘tom‘,‘tompamtom‘)

>>> print m.group()                         //匹配的第一个tom

tom

>>> m =re.match(r‘tom‘,‘tgdettompamtom‘)

>>> print m.group()

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

AttributeError: ‘NoneType‘ object has noattribute ‘group‘

//未匹配成功,只匹配开头的

split(string[,maxsplit])|re.split(pattern,string[,maxsplit]):

按照能够匹配的子串string分割后返回列表。Maxsplit用于指定最大分割次数,不指定将全部分割。

import re

p = re.compile(r‘\d+‘)

print p.split(‘one1two2there3four4’)

###output###

#[‘one’,’two’,’there’,’four’,’’]

Findall(string[,pos[,endpos]])|re.findall(pattern,string[,flags]):

搜索string,以列表形式返回全部能匹配的子串。

print p.findall(‘one1two2there3four4’)

>>> p = re.compile(r‘\d+‘)

>>> r =p.split(‘one1two2there3four4‘)

>>> print r

[‘one‘, ‘two‘, ‘there‘, ‘four‘, ‘‘]

>>> p = re.compile(r‘\d+‘)

>>>p.findall(‘one1two2there3four4five‘)

[‘1‘, ‘2‘, ‘3‘, ‘4‘]

re.sub函数进行以正则表达式为基础的替换工作

>>> re.sub(‘[abc]‘,‘o‘,‘Mark‘)

‘Mork‘

>>> re.sub(‘[abc]‘,‘o‘,‘rock‘)

‘rook‘

>>> re.sub(‘[abc]‘,‘o‘,‘caps‘)

‘oops‘

>>>re.sub(‘[abc]‘,‘o‘,‘mastash‘,1)

‘mostash‘

创建使用模块

为了实现对程序特定功能的调用和存储,人们将代码封装起来,可以供其他程序调用,可以称之为模块。

使用模块的好处:

程序可扩展性

减少程序代码

方便程序架构的更改

常用模块

import sys

sys.path

sys.argv

sys.exit

import os

os.system(‘uname’)

os.mkdir(‘myDir’)

os.chdir(‘~’)

time

>>> import sys

>>> sys.version

‘2.7.6 (default, Mar 22 2014, 22:59:38)\n[GCC 4.8.2]‘

>>> sys.version_info

sys.version_info(major=2, minor=7, micro=6,releaselevel=‘final‘, serial=0)

>>> sys.maxsize

2147483647

>> sys.exit()                   //退出

[email protected]:~/python$

>>> import tab

>>> import sys

>>> sys.path               //查看路径

[‘‘, ‘/usr/lib/python2.7‘,‘/usr/lib/python2.7/plat-i386-linux-gnu‘, ‘/usr/lib/python2.7/lib-tk‘,‘/usr/lib/python2.7/lib-old‘, ‘/usr/lib/python2.7/lib-dynload‘,‘/usr/local/lib/python2.7/dist-packages‘, ‘/usr/lib/python2.7/dist-packages‘,‘/usr/lib/python2.7/dist-packages/PILcompat‘,‘/usr/lib/python2.7/dist-packages/gtk-2.0‘, ‘/usr/lib/python2.7/dist-packages/ubuntu-sso-client‘]

[email protected]:~/python$vim argv.py

#!/usr/bin/python

import sys

print sys.argv[0]

print ‘You argumentsare:‘,sys.argv[1],sys.argv[2]

[email protected]:~/python$python argv.py hello world                         argv.py

You arguments are: hello world

//打印输入的两个参数,传递参数

>>> import tab,os

>>> os.system(‘df -h‘)

Filesystem      Size Used Avail Use% Mounted on

/dev/sda1        19G 3.5G   15G  20% /

none            4.0K     0 4.0K   0% /sys/fs/cgroup

udev            493M  4.0K 493M   1% /dev

tmpfs           101M 1.4M  100M   2% /run

none            5.0M     0 5.0M   0% /run/lock

none            502M  152K 502M   1% /run/shm

none            100M   44K 100M   1% /run/user

/dev/sr0       1003M 1003M     0 100% /media/wangchao/Ubuntu 14.04.2 LTSi386

0

//命令执行成功返回0.

>>> test = os.system(‘df -h‘)

>>> print test                       //可用于写程序,命令是否执行成功

0

>>> a=os.popen(‘df‘)

>>> a.read()                      //将df结果存入文件,读

‘Filesystem     1K-blocks    Used Available Use% Mountedon\n/dev/sda1       19478204 3624320  14841404 20% /\nnone                  4       0         4  0% /sys/fs/cgroup\nudev             503852       4    503848  1% /dev\ntmpfs             102720    1336   101384   2% /run\nnone                5120       0     5120   0% /run/lock\nnone              513600     152   513448   1% /run/shm\nnone              102400      44   102356   1%/run/user\n/dev/sr0         1027072 1027072         0 100% /media/wangchao/Ubuntu 14.04.2LTS i386\n‘

>>>a=os.popen(‘df‘)

>>> a.readlines()                               //列表方式

[‘Filesystem     1K-blocks    Used Available Use% Mounted on\n‘,‘/dev/sda1       19478204 3624320  14841404 20% /\n‘, ‘none                  4       0         4  0% /sys/fs/cgroup\n‘, ‘udev             503852       4    503848  1% /dev\n‘, ‘tmpfs            102720    1336    101384  2% /run\n‘, ‘none               5120       0      5120  0% /run/lock\n‘, ‘none             513600     152    513448  1% /run/shm\n‘, ‘none             102400      44    102356  1% /run/user\n‘, ‘/dev/sr0        1027072 1027072         0 100%/media/wangchao/Ubuntu 14.04.2 LTS i386\n‘]

>>> a=os.popen(‘df‘)

>>> for i in a.readlines():

... print i

...

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/sda1       19478204 3624320  14841404 20% /

none                   4       0        4   0% /sys/fs/cgroup

udev              503852       4   503848   1% /dev

tmpfs             102720    1336   101384   2% /run

none                5120       0     5120   0% /run/lock

none              513600     152   513448   1% /run/shm

none              102400      44   102356   1% /run/user

/dev/sr0         1027072 1027072         0 100% /media/wangchao/Ubuntu 14.04.2LTS i386

>>> os.getcwd()                    //查看当前目录

‘/home/wangchao/python‘

>>>os.chdir(‘/usr/local/src‘)           //切换目录

>>> os.getcwd()

‘/usr/local/src‘

可以通过os调用linux中任何命令

Time模块

>>> import time

>>> time.sleep(3)                //睡眠3秒

>>> time.time()                  //时间,从1970年到现在的秒数

1439910124.102958

>>> time.strftime(‘%y‘)

‘15‘

>>> time.strftime(‘%Y‘)

‘2015‘

>>> time.strftime(‘%Y%m%d%H:%M:%S‘)

‘20150818 23:04:50‘

>>> time.timezone          //时区

-28800

datetime模块

>>> import datetime

>>> datetime.timedelta()        //计算日期程序

datetime.timedelta(0)

>>>(datetime.datetime.now()-datetime.timedelta(days=3)).strftime("%Y-%m-%d")

‘2015-08-16‘

//计算三天前的日期

>>> (datetime.datetime.now()+datetime.timedelta(days=3)).strftime("%Y-%m-%d")

‘2015-08-22‘

//计算三天后日期

制作模块

#!/usr/bin/python

name=’my first module’

version =’0.1’

youName=raw_input(‘what is your name?’)

print ‘So your name is’,youName

练习程序:

备份脚本

实现常规备份功能

记录日志

备份时可指定排除目录

时间: 2024-07-31 13:09:39

python第三天学习笔记的相关文章

Python第三周 学习笔记(1)

字典 key-value键值对的数据的集合 可变的.无序的.key不重复 初始化: d = dict() d = {} d = dict(**kwargs) 如:d = dict(a=1,b=2) dict(iterable, **kwarg) 使用可迭代对象和name=value对构造字典,不过可迭代对象的元素必须是一个二元结构 dict(mapping, **kwarg) dict.fromkeys(iterable, value) 字典元素的访问 d[key] 返回key对应的值value

python基础教程_学习笔记26:好玩的编程

好玩的编程 程序设计的柔术 当大家坐下来并计划应该如何组织程序的时候,对于这个具体的程序,还没有任何的经验.在实现功能的时候,会逐渐地学到对原始设计有用的新知识.不应该无视一路走来所吸取的教训,而应该将它们用于软件的重新设计(或重构)中. 灵活性的实现包括许多方面,下面是其中两个: 原型设计:python最棒的功能之一就是可以快速地编写程序.编写原型程序是更充分地了解问题的一种很好的方法. 配置:灵活性有很多种存在形式.配置的目的就是让程序某部分的改变更简单,对于你和用户来说都是这样. 第三点是

python基础教程_学习笔记8:序列_练习与总结_1

序列_练习与总结 每次处理一个字符 任务: 用每次处理一个字符的方式处理字符串. 方案: 可以创建一个列表,列表的子项是字符串的字符.python实际上并没有一个特别的类型来对应"字符"并以此和字符串区分开来.可以调用内建的list,用字符串作为参数: thelist=list(thestring) 也可以不创建一个列表,直接用for语句完成对该字符串的循环遍历: for c in thestring: do_something_with(c) 或者使用列表推导中的for来遍历: re

python之raw_input()(学习笔记六)

python之raw_input()(学习笔记六) 我们经常使用raw_input()读取用户的输入,如下例子所示: >>> name = raw_input('please input your name:'),截图如下: 下面简单说下,raw_input()与if搭配使用,脚本如下: #!/usr/bin/env python # -*- coding:utf-8 -*- birth = raw_input('birth:') if birth < 2000: print '0

python基础教程_学习笔记23:图形用户界面

图形用户界面 丰富的平台 在编写Python GUI程序前,需要决定使用哪个GUI平台. 简单来说,平台是图形组件的一个特定集合,可以通过叫做GUI工具包的给定Python模块进行访问. 工具包 描述 Tkinter 使用Tk平台.很容易得到.半标准. wxpython 基于wxWindows.跨平台越来越流行. PythonWin 只能在Windows上使用.使用了本机的Windows GUI功能. JavaSwing 只能用于Jython.使用本机的Java GUI. PyGTK 使用GTK

python基础教程_学习笔记3:元组

元组 元组不能修改:(可能你已经注意到了:字符串也不能修改.) 创建元组的语法很简单:如果用逗号分隔了一些值,那么你就自动创建了元组. >>> 1,3,'ab' (1, 3, 'ab') 元组也是(大部分时候是)通过圆括号括起来的. >>> (1,3,'13') (1, 3, '13') 空元组可以用没有内容的两个圆括号来表示. 如何实现包括一个值的元组呢? >>> (5) 5 >>> ('ab') 'ab' >>>

python基础教程_学习笔记9:抽象

抽象 懒惰即美德. 抽象和结构 抽象可以节省大量工作,实际上它的作用还要更大,它是使得计算机程序可以让人读懂的关键. 创建函数 函数可以调用(可能包含参数,也就是放在圆括号中的值),它执行某种行为并且返回一个值.一般来说,内建的callable函数可以用来判断函数是否可调用: >>> import math >>> y=1 >>> x=math.sqrt >>> callable(x) True >>> callab

python基础教程_学习笔记10:异常

异常 什么是异常 Python用异常对象来表示异常情况.遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行: >>> 1/0 Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> 1/0 ZeroDivisionError: integer division or modulo by

python基础教程_学习笔记6:字典

字典 映射(mapping),一种可通过名字引用值得数据结构. 字典是python中唯一内建的映射类型. 字典中的值没有特殊的顺序,但都存储在一个特定的键(key)里.键可以是数字.字符串甚至是元组. 字典的使用 某些情况下,字典比列表更加适用,比如: 表征游戏棋盘的状态,每个键都是由坐标值组成的元组: 存储文件修改数,用文件名作为键: 数字电话/地址簿: 假如有一个人名列表如下: >>>names=['Alice','Beth','Cecil','Dee-Dee','Earl'] 如果