Python基础

调试:python -m pdb err.py

以参数-m pdb启动,输入命令l来查看代码,输入命令n可以单步执行代码,输入命令q结束调试,命令p查看变量,命令c继续运行

脚本的开始处加入import pdb,然后在可能出错的地方放一个pdb.set_trace(),就可以设置一个断点

 

表 1. pdb 常用命令

命令解释
break 或 b 设置断点

设置断点

continue 或 c

继续执行程序
list 或 l查看当前行的代码段
step 或 s进入函数
return 或 r执行代码直到从当前函数返回
exit 或 q中止并退出
next 或 n执行下一行
pp打印变量的值
help帮助

清除断点 

cl 2 #删除第2个断点

查看断点信息 

b

查看全部栈内变量

a

python中变量的命名规则:

  • 类似__xx,以双下划线开头的实例变量名,就变成了一个私有变量(private),只有内部可以访问,外部不能访问;
  • 类似__xx__,以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,它不是private变量,下面会介绍Python中的常见特殊变量;
  • 类似_x,以单下划线开头的实例变量名,这样的变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是请把我视为私有变量,不要随意访问”。
  1. a(rgs)  #打印当前函数的参数  
  2. w(here)  #打印堆栈信息  
  3. d(own)  #移至下层堆栈  
  4. u(p)  #移至上层堆栈  
  5. j(ump)  #跳转到指定行  
  6. disable [bpnumber [bpnumber]] #失效断点  
  7. enable[bpnumber [bpnumber]]  #启用断点  
  8. cl(ear) [filename:lineno | bpnumber [bpnumber]] #删除断点  
  9. q(uit)/exit  #中止调试并退出 

遍历文件夹

 

import os
import os.path
rootdir = “d:\data”                                   # 指明被遍历的文件夹

for parent,dirnames,filenames in os.walk(rootdir):    #三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
    for dirname in  dirnames:                       #输出文件夹信息
      print "parent is:" + parent
      print  "dirname is" + dirname

    for filename in filenames:                        #输出文件信息
      print "parent is": + parent
      print "filename is:" + filename
       print "the full name of the file is:" + os.path.join(parent,filename) #输出文件路径信息

 

1、os.path.exists(path) 判断一个目录是否存在

2、os.makedirs(path) 多层创建目录

3、os.mkdir(path) 创建目录

def mkdir(path):
    # 引入模块
    import os
 
    # 去除首位空格
    path=path.strip()
    # 去除尾部 \ 符号
    path=path.rstrip("\\")
 
    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    isExists=os.path.exists(path)
 
    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        print path+' 创建成功'
        # 创建目录操作函数
        os.makedirs(path)
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        print path+' 目录已存在'
        return False
 
# 定义要创建的目录
mkpath="d:\\qttc\\web\\"
# 调用函数
mkdir(mkpath)

 

字符串函数:

newstr = string.replace(old, new[, max]).replace(old, new[, max])

 

split函数:

>>> print b
   fuck   the    world 

>>> list1=b.split()#把空格过滤出去,剩下的组成一个list,也可以在split()的括号里传入一个参数
>>> print list1
['fuck', 'the', 'world']

join函数:

>>> list1
['fuck', 'the', 'world']
>>> delimiter=' '

>>> line=delimiter.join(list1)
>>> print line
fuck the world

 

#!/usr/bin/python

这个东西写过脚本的人都知道,用来标明该脚本的执行器

类似的还有

#!/bin/bash 通过bash来执行
#!/usr/local/php/bin/php 通过php执行器来执行

 

# -*- coding: utf-8 -*-

这个是设置脚本的编码格式,不然非英文可能会出现乱码

 

 

匿名函数lambda

#lambda很好用,创建匿名函数很方便

g = lambda x,y : x+yg(

g(3,5)#返回8

匿名函数分为四部分,标识 lambda,分号 :,参数 x,y,操作 x+y

除了这个之外,还有函数map、filter一个进行映射,一个进行过滤

 

__name__=="__main__"

一个文件就是一个模块,在python中每个模块都有一个__name__属性,属性的值取决于如何使用该模块,一般有两种使用方式,直接在命令行运行,这个时候__name__值为__main__,当import使用的时候,__name__值就是当前模块的名称(不带扩展名),因此可以通过这个判断是否是直接在命令行运行程序,以便做一些脚本使用。

 

创建元组

复制代码代码如下:

tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d";


创建空元组

复制代码代码如下:

tup1 = ();


元组中只包含一个元素时,需要在元素后面添加逗号来消除歧义

复制代码代码如下:

tup1 = (50,);

访问元组
元组可以使用下标索引来访问元组中的值,如下实例:

复制代码代码如下:

#!/usr/bin/python

 

tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5, 6, 7 );

print "tup1[0]: ", tup1[0]
print "tup2[1:5]: ", tup2[1:5]
#以上实例输出结果:
#tup1[0]:  physics
#tup2[1:5]:  [2, 3, 4, 5]

元组中的元素不可以修改,不可以删除。因此不可以创建一个空的元组后,再给其中的元素赋值。但两个元组可以相加成一个元组,也可以删除整个元组

 

多行注释:三对双引号"""

Python调用Shell脚本,有两种方法:os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容。

#监控整个流程时间

TIME_MONITOR_LIST = [0,0]

TIME_MONITOR_LIST[0] = int(time.time())

main()

TIME_MONITOR_LIST[1] = int(time.time())
print('%.4f min'%(float(TIME_MONITOR_LIST[1]-TIME_MONITOR_LIST[0])/60))

sys.path是python的搜索模块的路径集,是一个list.在python 环境下使用sys.path.append(path)添加相关的路径,但在退出python环境后自己添加的路径就会自动消失!

模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于您如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这 种情况下, __name__ 的值将是一个特别缺省"__main__"。

在cmd 中直接运行.py文件,则__name__的值是'__main__';

而在import 一个.py文件后,__name__的值就不是'__main__'了;

从而用if __name__ == '__main__'来判断是否是在直接运行该.py文件

 

 

import shutil

shutil -- High-level file operations 是一种高层次的文件操作工具

类似于高级API,而且主要强大之处在于其对文件的复制与删除操作更是比较支持好。

copyfile(src, dst)

copyfile( src, dst) 从源src复制到dst中去。当然前提是目标地址是具备可写权限。抛出的异常信息为IOException. 如果当前的dst已存在的话就会被覆盖掉
 copymode( src, dst) 只是会复制其权限其他的东西是不会被复制的
 copystat( src, dst) 复制权限、最后访问时间、最后修改时间
 copy( src, dst)    复制一个文件到一个文件或一个目录
 copy2( src, dst)  在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西
 copy2( src, dst)  如果两个位置的文件系统是一样的话相当于是rename操作,只是改名;如果是不在相同的文件系统的话就是做move操作
 copytree(olddir,newdir,True/Flase) 把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接

 

常用python库的安装

 

sudo apt-get install python-numpy

sudo apt-get install Python-scipy

sudo apt-get install python-matplotlib

 


 

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

# 创建一个名为python34的环境,指定Python版本是3.4(不用管是3.4.x,conda会为我们自动寻找3.4.x中的最新版本)

condacreate--namepython34python=3.4

 

# 安装好后,使用activate激活某个环境

activatepython34# for Windows

sourceactivatepython34# for Linux & Mac

# 激活后,会发现terminal输入的地方多了python34的字样,实际上,此时系统做的事情就是把默认2.7环境从PATH中去除,再把3.4对应的命令加入PATH

 

# 此时,再次输入

python--version

# 可以得到`Python 3.4.5 :: Anaconda 4.1.1 (64-bit)`,即系统已经切换到了3.4的环境

 

# 如果想返回默认的python 2.7环境,运行

deactivatepython34# for Windows

sourcedeactivatepython34# for Linux & Mac

 

# 删除一个已有的环境

condaremove--namepython34--all

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

# 创建一个名为python34的环境,指定Python版本是3.4(不用管是3.4.x,conda会为我们自动寻找3.4.x中的最新版本)

condacreate--namepython34python=3.4

 

# 安装好后,使用activate激活某个环境

activatepython34# for Windows

sourceactivatepython34# for Linux & Mac

# 激活后,会发现terminal输入的地方多了python34的字样,实际上,此时系统做的事情就是把默认2.7环境从PATH中去除,再把3.4对应的命令加入PATH

 

# 此时,再次输入

python--version

# 可以得到`Python 3.4.5 :: Anaconda 4.1.1 (64-bit)`,即系统已经切换到了3.4的环境

 

# 如果想返回默认的python 2.7环境,运行

deactivatepython34# for Windows

sourcedeactivatepython34# for Linux & Mac

 

# 删除一个已有的环境

condaremove--namepython34--all


通过which condaconda --version命令检查是否正确。假如安装的是Python 2.7对应的版本,运行python --versionpython -V可以得到Python 2.7.12 :: Anaconda 4.1.1 (64-bit),也说明该发行版默认的环境是Python 2.7.

在命令中运行conda info -e查看已安装的环境

 

 

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

# 创建一个名为python34的环境,指定Python版本是3.4(不用管是3.4.x,conda会为我们自动寻找3.4.x中的最新版本)

condacreate--namepython34python=3.4

 

# 安装好后,使用activate激活某个环境

activatepython34# for Windows

sourceactivatepython34# for Linux & Mac

# 激活后,会发现terminal输入的地方多了python34的字样,实际上,此时系统做的事情就是把默认2.7环境从PATH中去除,再把3.4对应的命令加入PATH

 

# 此时,再次输入

python--version

# 可以得到`Python 3.4.5 :: Anaconda 4.1.1 (64-bit)`,即系统已经切换到了3.4的环境

 

# 如果想返回默认的python 2.7环境,运行

deactivatepython34# for Windows

sourcedeactivatepython34# for Linux & Mac

 

# 删除一个已有的环境

condaremove--namepython34--all

 

 

 

 

python中的特殊变量:

__name__ 区分模块是被import还是被python直接执行。被import时该值是模块名,被python直接执行时是'__main__'
__file__ 当前文件的路径+文件名
__doc__ 模块、类、函数的第一段代码如果是字符串的话,使用__doc__访问该字符串

 

另外一种达到可变参数 (Variable Argument) 的方法:使用*args和**kwargs语法。其中,*args是可变的positional arguments列表,**kwargs是可变的keyword arguments列表。并且,*args必须位于**kwargs之前,因为positional arguments必须位于keyword arguments之前。

*args 用来将参数打包成tuple给函数体调用

 **kwargs 打包关键字参数成dict给函数体调用

必须是(arg,*args,**kwargs)这个顺序,否则程序会报错。

 

函数包装器仅仅是改改函数的参数或者接口,不改变函数的主要功能。

当调用函数包装器时仅仅返回function object,真正的函数并没有执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值