列表和元组
列表就是所谓的数组,它拥有着数组的属性,但是在PY中,列表中封装了许多方法。
元组就是静态数组,静态理解为不可变,元组的内容一旦创建之后就定了,不能通过代码来修改元组的内容和大小。虽然一个元组的内容不可以改变,但是可以将两个元组的内容合并成一个元组。然而,对于长度为1~20的元组,即使它们不在被使用,它们的空间也不会立刻还给系统,而是留待未来使用。这意味着当未来需要一个同样大小的新的元组时,我们不再需要向操作系统申请一块内存来存放数据,因为我们已经有了预留的空间。这样会话费更少的时间。
字典
与列表和元组不同,字典存储的是键值对,键是不可以重复的。
副本问题
在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
def change(num):
num=10
a=1
change(a)
print("The a is ",a)
The a is 1
如上代码所示,有一个change函数,此函数的内容是想改变a的值。在函数调用中并未改变a的值,这是因为在函数调用过程中产生了副本,改变的只是副本的值,而不是对象本体。
可变参数
def myprint(arg,*vartuple):
print("输出:",arg,end=" "),
for var in vartuple:
print(var,end=" ")
return
myprint(10,20,30)
注:因为print每次调用过程中都会自动换行,若需要不换行,则可以在print函数内部增加end=“ ”,
双引号中的内容可自拟。(此方法针对与3.x版本)。若是2.x版本,则可以在print后面加“,”。
参数列表解析
import sys, getopt
def main(argv):
inputfile = ''
outputfile = ''
try:
opts, args = getopt.getopt(argv,"hi:o:",["help","ifile=","ofile="])
except getopt.GetoptError:
print ('test.py -i <inputfile> -o <outputfile>')
sys.exit(2)
for opt, arg in opts:
if opt in ("-h","--help"):
print( 'help:test.py -i <inputfile> -o <outputfile>')
sys.exit()
elif opt in ("-i", "--ifile"):
inputfile = arg
elif opt in ("-o", "--ofile"):
outputfile = arg
print( '输入的文件为:', inputfile)
print('输出的文件为:', outputfile)
if __name__ == "__main__":
main(sys.argv[1:])
输出结果:
python test.py -i in.txt -o out.txt
输入的文件为: in.txt
输出的文件为: out.txt
python test.py --ifile in.txt --ofile out.txt
输入的文件为: in.txt
输出的文件为: out.txt
python test.py -h
help:test.py -i <inputfile> -o <outputfile>
代码解析:
- 处理所使用的函数叫getopt(),因为是直接使用import导入的getopt模块,所以要加上限定getopt才可以。
- argv代表执行py文件的参数。
- "hi: o:"代表执行文件的代码选项:-h -i -o。其中i和o后面分别有“:”,则代表-i选项和-o选项后面必须加参数。
- ["help","ifile=","ofile="]代表的是长选项,若长选项后面未加“=”,则代表该选项后面不加参数;若长选项后面有“=”可用--ifile和--ofile,用法与-i和-o相同。
一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。因此
if __name__ == '__main__'
的作用就是控制这两种情况执行代码的过程,在if __name__ == '__main__'
下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的。每个python模块(python文件,也就是此处的test.py和import_test.py)都包含内置的变量__name__,当运行模块被执行的时候,__name__等于文件名(包含了后缀.py);如果import到其他模块中,则__name__等于模块名称(不包含后缀.py)。而“main”等于当前执行文件的名称(包含了后缀.py)。进而当模块被直接执行时,
if __name__ == '__main__'
结果为真