1. 两种方法遍历一个字典中的 键 和 值
>>> hipython
{'three': 3, 'two': 2, 'one': 1}
>>> hipython.keys()
['three', 'two', 'one']
>>> for key in hipython :
... print(key)
...
three
two
one
>>> hipython.values()
[3, 2, 1]
>>> for key in hipython:
... print(hipython[key])
...
3
2
1
2. 编写 Python 代码的时候一定要注意缩进,要不然程序就会出错,看例子,输出 1~50 内的素数(勿喷,虽然简单,但是足够经典)
>>> for i in range(1,50+1):
... for t in range(2,int(math.sqrt(i))+1):
... if i % t == 0:
... break
... else:
... print(i)
...
Traceback ( File "<interactive input>", line 1
for i in range(1,50+1):
^
IndentationError: unexpected indent
>>> for i in range(1,50+1):
... for t in range(2,int(math.sqrt(i))+1):
... if i % t == 0:
... break
... else:
... print(i)
...
Traceback ( File "<interactive input>", line 2
for t in range(2,int(math.sqrt(i))+1):
^
IndentationError: expected an indented block
>>> for i in range(1,50+1):
... for t in range(2,int(math.sqrt(i))+1):
... if i % t == 0:
... break
... else:
... print(i)
...
1
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
3. Python 中调用函数时,传递参数方法小结
3.1 有默认值的参数
此时传递参数是按照顺序依次传递的,如果仅仅向最后一个参数传递特定的值,要按照最后一种方法处理,如例子
>>> def args(x = 5):
return x ** 2
>>> args(2)
4
>>> args()
25
>>>
>>> def args(x = 1,y = 2,z = 3):
return (x + y - z) ** 2
>>> args (0)
1
>>> args(2,2)
1
>>> args ( , , 3)
SyntaxError: invalid syntax
>>> def args(x = None, y = None, z = None):
if x == None:
x = 1
if y == None:
y = 2
if z == None:
z = 3
return (x + y -z)**2
>>> args()
0
>>> args(None,None,2)
1
3.2 向指定的参数传递值——按照参数名进行传值,这样在调用函数的时候,就可以不按照参数的顺序进行给参数赋值了,而且使用这种方法不必在函数声明时讲参数的默认值置为None。看下例:
>>> def args(x,y,z):
return x + y - z
>>> args(1,2,3)
0
>>> args(z = 3, y = 2, x = 1)
0
>>>
3.3 调用函数的同时,可以使用按顺序传递参数和按参数名传递参数两种方法。但是使用这样的方法的时候要注意,按顺序传递的参数不能位于按参数名传递的参数之后,否则就会报错。看下例:
>>> def args(x,y,z):
return x + y + z
>>> args(1,z = 3,y = 2)
6
>>> args(z = 3,y = 2,1)
SyntaxError: non-keyword arg after keyword arg
>>> args(5, z = 6, x = 7)
Traceback (most recent call last):
File "<pyshell#36>", line 1, in <module>
args(5, z = 6, x = 7)
TypeError: args() got multiple values for keyword argument 'x'
>>>
3.4 传递任意数量的参数——在参数名前加上一个 * ,即表示该参数是一个可变长参数(如:列表),示例代码如下:
>>> def pylist( * list):
l = []
for i in list:
l.extend(i)
return l
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [7,8,9]
>>> pylist(a,b)
[1, 2, 3, 4, 5, 6]
>>> pylist(b,c)
[4, 5, 6, 7, 8, 9]
>>> pylist(a,b,c)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
3.5 在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数.
比如定义一个函数,包含上述4种参数:
def func(a, b, c=0, *args, **kw):
print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw
在函数调用的时候,Python解释器自动按照参数位置和参数名把对应的参数传进去:
>>> func(1, 2)
a = 1 b = 2 c = 0 args = () kw = {}
>>> func(1, 2, c=3)
a = 1 b = 2 c = 3 args = () kw = {}
>>> func(1, 2, 3, 'a', 'b')
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}
>>> func(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
最神奇的是通过一个tuple和dict,你也可以调用该函数:
>>> args = (1, 2, 3, 4)
>>> kw = {'x': 99}
>>> func(*args, **kw)
a = 1 b = 2 c = 3 args = (4,) kw = {'x': 99}
所以,对于任意函数,都可以通过类似func(*args,
**kw)
的形式调用它,无论它的参数是如何定义的。
小结
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的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。