所有测试语句基于Python 2.7.1
自学Python,如果哪里说的不恰当,还请指正。谢谢。
示例绝大部分来自博客园vamei的python教程
部分内容来自廖雪峰的Python博客
1.函数参数 关键字传递#! /usr/bin/env python#coding=UTF-8#函数参数关键字传递 根据每个参数的名字传递参数-->无需遵照位置对应关系#可以与位置传递混用,但是直接的值传递的参数要出现在关键字参数之前defsum(a, b, c):returna + b +cPRint"sum(1,b=2,c=3) =", sum(1, b=2, c=3)print"sum(c=3,b=4,a=5) =", sum(c=3, b=4, a=5)
2.函数参数默认值#赋予参数默认值 如果调用函数时没有传递对应位置上的值,将使用默认值defsqure_sum(a, b, c=1):returna ** a + b ** b + c **cprint"squre_sum(2,3)=", squre_sum(2, 3)print"squre_sum(2,3,4)=", squre_sum(2, 3, 4)
定义默认参数要牢记一点:默认参数必须指向不变对象!
否则重复调用函数时,并使用默认参数时,默认参数的值会发生改变。
3.函数参数 包裹传递 可变参数#函数参数包裹传递 不确定调用时会传递几个参数#包裹位置传递deffunc(*name):printtype(name)printnameprintfunc(1, 2, 3)printfunc(1, 2, 3, 4, 5)
这里为什么每次都输出有None,还请知道的园友告知一下,谢谢。
感谢园友月缺一格 的指正,这里函数没有返回值,故默认返回None.
#包裹关键字传递 dic是一个字典 收集所有的关键字传递给函数func_tdeffunc_t(**dic):printtype(dic)printdicprintfunc_t(a=1, b=2)printfunc_t(a=3, b=4, c=5)
4.解包裹#解包裹 *和** 也可以在调用的时候使用 ,即解包裹 unpackingdeffunc_m(a, b, c):printa, b, c
args= (1, 2, 3)#在传递tuple时,让tuple的每一个元素对应一个位置参数,*提示Python去拆分func_m(*args)#词典解包裹dic = {'a': 11,'b': 22,'c': 33}
func_m(**dic)#得到value值func_m(*dic)#得到key值
5.循环设计string ='xiaomi vs meizu'forindexinrange(0, len(string), 1):printstring[index],
分别定义上限start,下限stop和每次循环的步长step
在python 2.x中,要使 print 不换行 在print语句最后加逗号(英文半角符号形式)
>>>print x,
在python 3.x中,要使 print 不换行,写成如下格式
>>>print(x, end="")
因为print函数的原型是
print(*objects, sep='', end='\n', file=sys.stdout, flush=False)
默认是以 \n 结尾,即换行。把 \n 替换为空字符串就行。
string ='xiaomi vs meizu'print'\n','字符串长度:', len(string)for(index, char)inenumerate(string):printindex,printchar,
利用enumerate()函数,可以在每次循环中同时得到下标和元素,enumerate()在每次循环中,
返回的是一个包含两个元素的定值表(tuple),两个元素分别赋予index和char。
a = [1, 2, 3]
b= [4, 5, 6]
c= [7, 8, 9]for(x, y, z)inzip(a, b, c):print(x, y, z)
如果你多个等长的序列,然后想要每次循环时从各个序列分别取出一个元素,可以利用zip()函数
zip()函数的功能,就是从多个列表中,依次各取出一个元素。每次取出的(来自不同列表的)元素合成一个元组,
合并成的元组放入zip()返回的列表中。zip()函数起到了聚合列表的功能。
a = [1, 2, 3]
b= [4, 5, 6]#cluster 聚合zipped =zip(a, b)print'聚合列表:', zipped#decompose 分解ma, mb = zip(*zipped)print'分解列表:', ma, mb
小结:
Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。
默认参数一定要用不可变对象,如果是可变对象,运行会有逻辑错误!
要注意定义可变参数和关键字参数的语法:
*args是可变参数,args接收的是一个tuple;
**kw是关键字参数,kw接收的是一个dict。
以及调用函数时如何传入可变参数和关键字参数的语法:
可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3));
关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})。
使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。
PS:
首次安装PyCharm IDE会发现,在调试的输出窗口中文显示为乱码;
这是因为工程默认的编码是GBk,而IDE的默认编码是UTF-8,
打开File --> settings--> Editor -->File Encodings 选项卡
将他们的编码统一一下,设置为支持中文的编码即可,如UTF-8。