python 脚本传递参数
python查找指定字符
#!/usr/bin/env python import sys import re f = open("log.txt", "rb") info = open("info.txt", "ab") for line in f.readlines(): if re.search(sys.argv[1], line): info.write(line) info.close() f.close()
当形参如*arg时表示传入数组,当形参如**args时表示传入键值对。
1
2
3
4
5
6
|
def myprint( * commends, * * map ): for comm in commends: print comm for key in map .keys(): print key, map [key] myprint( "hello" , "word" ,username = "tian" ,name = "wei" ) |
输出:
1
2
3
4
|
hello word username tian name wei |
python中定义一个函数,可以通过正常的只传入值或key-value的方法调用。但是如果第一个时参数传入的是key-value的方法,那么后面的必须都是key-value方法,如果第一个不是,那么后面的可以根据情况再传入值就可以了。
例子如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
def parrot(voltage = "fff" ,state = 'a stiff' ,action = 'voom' , type = 'Norwegian Blue' ): print "-- This parrot wouldn't" , action, print "if you put" , voltage, "volts through it." print "-- Lovely plumage, the" , type print "-- It's" , state, "!" parrot( 1000 ) #可以 parrot(action = 'VOOOOOM' , voltage = 1000000 ) #可以,都是key-value方法 parrot( 'a thousand' , state = 'pushing up the daisies' ) #可以,第一个实参为直接传入法,后面无所谓了 parrot( 'a million' , 'bereft of life' , 'jump' ) #可以,都是传值,而且由于形参都有默认值,则按顺序一个个替换 parrot(voltage = "33" , "ff" , "abc" ) # 不可以,第一个为Key-value传值法,以后的都必须是 |
Python新手入门,在python中函式定义主要有四种方式:
① F(arg1,arg2,...),最常见的定义方式,一个函式可以定义任何个参数,每个参数间用逗号分割,用这种参数在调用的时候必须在函式名后面的小括号中提供个数相等的值(实参),并且顺序必须相同,形参与实参一一对应
1
2
|
def a(x,y): print x,y |
调用a函式,a(1,2)则x=1,y=2,如果a(1)或者a(1,2,3)则会出错
② F(arg1,arg2=value2,...agrN=valueN),则将为函式提供默认值。
1
2
|
def a(x,y = 3 ): print x,y |
调用该函式,a(1,2)则x=1,y=2,如果a(1)不会导致错误,此时x=1,y=3,y值将使用默认值,a(y=4,x=2)同理
可变参数:
③ F(*arg1),以一个*加形参的方式来表示函式的实参个数不确定,参数个数>=0,采用这样的方式定义函式,在函式内部将以实参名的方式构建一个元组(tuple)
1
2
3
4
5
6
7
8
9
10
11
12
|
def a( * x): # 定义一个名为x的元组 def a( * t): print x >>>a( 1 ) ( 1 ,) >>>a() None >>>a( 1 , 2 , 3 ) ( 1 , 2 , 3 ) |
遍历该元组(计算总和)的一种方式,此时r定义为一元组:
1
2
3
4
5
|
def y( * r): x = 0 for t in r: x + = t print x |
④ F(**arg)形参名前加2个**表示在函式内部将被存放在以形参名为标识符的dictionary,这时调用将使用arg1=value1,arg2=value2...
1
2
3
4
5
6
7
8
9
|
def a( * * b): print b >>>a() None >>>a(x = 1 ,y = 2 ) { 'y' : 2 , 'x' : 1 } #注意遍历返回的顺序与形参位置顺序相反 >>>a( 1 , 2 ) #error |
可通过以下方式来获取预期键值对,如果形参是未定义'y'的键,将返回None
1
2
3
4
5
6
7
8
9
|
def a( * * x): print x.get( 'y' ) >>>a(x = 1 ,y = 2 ) 2 >>>a(x = 1 ) None >>>a(x = 1 ,b = 2 ) None |
Python参数调用过程按照以上四种方法优先级依次降低。
①方式解析,然后是②中的arg=value方式,再分别按照③>④优先级传参
以上函式命名不符合规范,仅用于简单标识说明,使用python 2.6.2
- <span style="font-weight: bold; ">python获取脚本传递参数:</span>
- import sys
- print sys.argv[0] ##脚本名
- print sys.argv[1] ## 第一个参数
- print sys.argv ###参数数组
- print len(sys.argv) ##参数个数
python 检查文件是否存在:
- import os
- as_uniq_info="/home/mtr_dir/auto_mtr/mtr_data/2012-09-26/tw/as_uniq_info"
- if(os.path.isfile(as_uniq_info)):
- print as_uniq_info + "exist!!!"
- else:
- print "File not exist!!!!"
或
os.path.exists(as_uniq_info)
python退出脚本:
- import sys
- sys.exit(0) ##正常退出
- sys.exit(1)##非正常退出
python检查变量是否在在:
- def fn():
- try:
- a=0
- b = open("1.py")
- raise "11" #这个异常不是必然发生,我这里只是假设
- c = open("2.py")
- except:
- d= locals()
- if 'b' in d:
- b.close()
- if 'c' in d:
- c.close()
- if __name__ == "__main__":
- fn()
或:
- 第一种方法:
- 'var' in locals().keys()
- 第二种方法:
- try:
- print var
- except NameError:
- print 'var not defined'
- 第三种方法:
- 'var' in dir()
转自http://blog.csdn.net/ysdaniel/article/details/8026126