Python学习笔记(3)

这篇博客探讨了Python编程中的关键概念,包括字典遍历、代码缩进的重要性,以及函数参数的多种调用方式。作者详细阐述了如何处理有默认值的参数、可变参数以及关键字参数,并强调了在使用默认参数时应避免使用可变对象。此外,还总结了传入可变参数和关键字参数的不同方法,强调了Python函数参数的灵活性及其在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。


注:部分内容参考至http://www.liaoxuefeng.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值