Python学习笔记(二)

在学习Python的过程中,记录的一些知识点。

- enumerate()函数

这个函数可以同时循环索引及元素

foo = 'abc'
for i, ch in enumerate(foo):
    print ch, '(%d)' %i

输出结果如下:

    a (0)
    b (1)
    c (2)

- 列表解析式

squared = [x **2 for in range(8) if not x  % 2]
for i in squared :
    print i

输出结果如下:

0
4
16
36

- 浅拷贝、深拷贝

  1. 非容器类型(比如数字、字符串和其他“原子”类型的对象,像代码、类型和xrangge对象等)没有被拷贝一说,浅拷贝是完全切片操作来完成的。
  2. 如果元组变量只包含原子类型对象,对它的深拷贝将不会进行。

-函数参数

必选参数、默认参数、可变参数、关键字参数
在定义参数的时候,使用如a=1的方式,可以给参数赋予默认值。如果该参数没有被传递值,将使用这个默认值。如果传递值,那就使用传递值。

默认参数一定要用不可变对象,如果是可变对象,运行会有逻辑错误!

定义可变参数仅仅在参数前面加一个*号,如*args。在函数内部,参数接收到的是一个元组(tuple)。另外Python允许在list或tuple前面加一个*号,把list或者tuple的元素变成可变参数传进去。

关键字参数要在参数前面加两个**号,如**kw。可变参数允许传入0个任意个参数,关键字参数允许传入0个或任意个 含参数名的参数,这些关键字参数在函数内部自动组装成一个dict。

在定义函数时,四种参数可以一起使用,需要注意的是参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。

def func(a, b, c=0, *args, **kw):
    print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw

最神奇的是通过一个tuple和dict,你也可以调用该函数:

args = (1, 2, 3, 4)
 kw = {'x': 99}
 func(*args, **kw)
</pre></pre>
输出如下:
<pre><pre class="inline:true decode:1 " >

a = 1 b = 2 c = 3 args = (4,) kw = {'x': 99}`

所以,对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。

- 递归函数

递归函数不用多说,但是在Python中,需要注意防止栈溢出,解决递归调用栈溢出的方法是通过尾递归优化。

尾递归是指:在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇