首页 > 编程语言 > 详细

Python学习笔记(二)

时间:2015-03-25 17:05:39      阅读:183      评论:0      收藏:0      [点我收藏+]
# -*- coding: utf-8 -*-
#trap.py中介绍了默认参数,下面介绍可变参数

print u‘------------------------1.可变参数-------------------------------‘

#1.可变参数
#比如计算a2 + b2 + c2 + ……
#由于参数个数不确定,我们首先想到可以把a,b,c……作为一个list或tuple传进来,这样,函数可以定义如下:
def calc(numbers):
    sum = 0
    for num in numbers:
        sum += num * num
    return sum
#但是调用的时候,需要先组装出一个list或tuple:
print calc([1, 2, 3])
print calc((1, 2, 3))

#使用*号定义可变参数。在函数内部,参数numbers接收到的是一个tuple。
def calc2(*numbers):
    sum = 0
    for num in numbers:
        sum += num * num
    return sum    
#利用可变参数,调用函数的方式可以简化成这样:
print calc2(1, 2, 3)
print calc2() #0个参数也可以
#如果已经有一个list或者tuple,要调用一个可变参数怎么办?可以这样做:
nums = [1, 2, 3]
print calc2(nums[0], nums[1], nums[2])
print calc2(*nums) #这么写最简单,很常见的写法

print u‘------------------------2. 关键字参数-------------------------------‘

#2. 关键字参数
#可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。
#而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。请看示例:
def person(name, age, **kw):
    print ‘name: ‘, name, ‘age: ‘, age, ‘other: ‘, kw

#函数person除了必选参数name和age外,还接受关键字参数kw。在调用该函数时,可以只传入必选参数:
person(‘Michel‘, 30) #name:  Michel age:  30 other:  {}

#也可以传入任意个数的关键字参数:
person(‘Michel‘, 30, city=‘Beijing‘)
person(‘Michel‘, 30, city=‘Beijing‘, gender=‘M‘, job=‘Engineer‘)

#和可变参数类似,也可以先组装出一个dict,然后,把该dict转换为关键字参数传进去:
kw = {‘city‘: ‘Beijing‘, ‘job‘: ‘Engineer‘}
person(‘Michel‘, 30, **kw)

print u‘------------------------3. 参数组合-------------------------------‘

#3. 参数组合
#多种参数一起使用时,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。

print u‘------------------------4.递归函数-------------------------------‘

#4.递归函数
#计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示。可以看出:
#fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n
#所以,fact(n)可以表示为n x fact(n-1),只有n=1时需要特殊处理。
#于是,fact(n)用递归的方式写出来就是:
def fact(n):
    if n == 1:
        return 1
    return n * fact(n-1)
print fact(5)

print u‘------------------------5.切片-------------------------------‘

#5.切片
#切片用于取一个list或tuple的部分元素
L = [‘Michael‘, ‘Sarah‘, ‘Tracy‘, ‘Bob‘, ‘Jack‘]
print L[0:3]  #取索引为0,1,2的三个元素
#如果第一个索引是0,可以省略
print L[:3]
#倒数切片:取倒数第一个和倒数第二个元素
print L[-2:]  #[‘Bob‘, ‘Jack‘]
#每两个取一个
print L[0:5:2]  #[‘Michael‘, ‘Tracy‘, ‘Jack‘]
#可以简写为
print L[::2]

#tuple也可进行切片操作,只是原tuple不变
t = (1, 2, 3, 4, 5) 
print t[:3]  #(1, 2, 3)
print t  #(1, 2, 3, 4, 5)

#字符串也可以进行切片操作,只是原字符串不变
print ‘ABCDEF‘[:3]

print u‘------------------------#6.迭代-------------------------------‘

#6.迭代
#如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。

#6.1字典的迭代

#迭代字典的Key
d = {‘a‘: 1, ‘b‘: 2, ‘c‘: 3}
for key in d:
    print key,
#迭代字典的Value
for value in d.itervalues():
    print value,
print ‘\n‘
#同时迭代Key和Value
for key, value in d.iteritems():
    print key, value

#6.2 字符串的迭代
for ch in ‘ABCDEF‘:
    print ch,
print ‘\n‘

#6.3 判断一个对象是否可迭代
#如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断
from collections import Iterable
print isinstance(‘abc‘, Iterable) #True
print isinstance(123, Iterable) # False

#6.4 取list得下标
#Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身
for i, value in enumerate([‘A‘, ‘B‘, ‘C‘]):
    print i, value
#上面的for循环里,同时引用了两个变量,在Python里是很常见的,比如下面的代码:
for x, y in [(1, 1), (2, 4), (3, 9)]:
    print x, y
    
print u‘------------------------#7.列表生成式-------------------------------‘

#7.列表生成式 List Comprehension

#7.1 常用的列表生成式
#例如,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用:
print range(1, 11)
#但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?
print [x*x for x in range(1, 10)]
#for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:
print [x*x for x in range(1, 10) if x%2 == 0]
#还可以使用两层循环,可以生成全排列:
print [m + n for m in ‘ABC‘ for n in ‘XYZ‘]

#7.1 列出当前目录下的所有文件和目录名,可以通过一行代码实现
import os #导入os模块
print [d for d in os.listdir(‘.‘)] #os.listdir可以列出文件和目录

 

Python学习笔记(二)

原文:http://www.cnblogs.com/actionke/p/4365998.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!