所有测试语句基于Python 2.7.1
自学Python,如果哪里说的不恰当,还请指正。谢谢。
示例绝大部分来自博客园vamei的python教程
部分内容来自廖雪峰的Python博客
#! /usr/bin/env python# coding=UTF-8# 函数参数关键字传递 根据每个参数的名字传递参数-->无需遵照位置对应关系# 可以与位置传递混用,但是直接的值传递的参数要出现在关键字参数之前def sum(a, b, c): return a + 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)
# 赋予参数默认值 如果调用函数时没有传递对应位置上的值,将使用默认值def squre_sum(a, b, c=1): return a ** a + b ** b + c ** cprint "squre_sum(2,3)=", squre_sum(2, 3)print "squre_sum(2,3,4)=", squre_sum(2, 3, 4)
定义默认参数要牢记一点:默认参数必须指向不变对象!
否则重复调用函数时,并使用默认参数时,默认参数的值会发生改变。
# 函数参数包裹传递 不确定调用时会传递几个参数# 包裹位置传递def func(*name): print type(name) print nameprint func(1, 2, 3)print func(1, 2, 3, 4, 5)
这里为什么每次都输出有None,还请知道的园友告知一下,谢谢。
感谢园友 月缺一格 的指正,这里函数没有返回值,故默认返回None.
# 包裹关键字传递 dic是一个字典 收集所有的关键字传递给函数func_tdef func_t(**dic): print type(dic) print dicprint func_t(a=1, b=2)print func_t(a=3, b=4, c=5)
# 解包裹 *和** 也可以在调用的时候使用 ,即解包裹 unpackingdef func_m(a, b, c): print a, b, cargs = (1, 2, 3)# 在传递tuple时,让tuple的每一个元素对应一个位置参数,*提示Python去拆分func_m(*args)# 词典解包裹dic = {'a': 11, 'b': 22, 'c': 33}func_m(**dic) # 得到value值func_m(*dic) # 得到key值
string = 'xiaomi vs meizu'for index in range(0, len(string), 1): print string[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) in enumerate(string): print index, print char,
利用enumerate()函数,可以在每次循环中同时得到下标和元素,enumerate()在每次循环中,
返回的是一个包含两个元素的定值表(tuple),两个元素分别赋予index和char。
a = [1, 2, 3]b = [4, 5, 6]c = [7, 8, 9]for (x, y, z) in zip(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。
新闻热点
疑难解答