python学习2

1.几个函数

abs(x)
cmp(x, y) //x>y,返回1,x==y返回0,x<y返回-1
int(x) //转型为int
isinstance(x, (int,float))  //例子,检查x是否为int或者float类型
//ps:函数名其实为指向函数对象的引用,可以把函数名赋给另一个变量:
a = abs
a(-1)

2. 定义函数

def 函数名(参数):
   函数体 //如果是空函数,可以只写个pass

函数可以返回多个值:

def reMutiResult(x ,y):
    nx = x + y
    ny = x - y
    return nx, ny
x, y = reMutiResult(10,8)

返回的实际上是一个tuple,所以还是返回一个值

3.默认参数

定义函数的时候,假如某个参数有常用值,可以将这个参数的默认值设为这个常数值,这样在调用这个函数的时候,假如没有指定该参数的值,则默认该参数为默认值

def test(x, y = 2):
    x = x + y
print test(5)
//结果为7

定义的时候,必选参数要放在默认参数前,假如有多个默认参数,而前面的默认参数按默认值而后面的默认参数要改变时

def test(x, y=2, z=3):
    n = x + y + z
    return n

print test(5, z=5) //结果为12

默认参数必需指向不变对象

4.可变参数
在参数前面加一个*可以把参数变成可变参数

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

这样calc函数可以传入任意个数的参数,包括0个
假如要传入list或者tuple,在传入的变量前加*

t = (1, 2, 3)
calc(*t)

5.关键字参数
在参数前面加**把参数变为关键字参数,关键字参数允许、传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

def person(name, age, **kw):
    print 'name:', name, 'age:', age, 'other:', kw
person('Aka', 20, gender='M', job='Engineer')
//结果是`name: Aka age: 20 other: {'gender': 'M', 'job': 'Engineer'}`

和可变函数一样,传入参数时可以传入dict,传入的时候前面加**
关键字参数可以拓展函数的功能。比如问卷调查中的可选项。

6.参数组合
可以将四种参数一起使用,但是顺序必需是:必选参数、默认参数、可变参数和关键字参数。

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


lis = ['Aka', 8, 23, 'li', 89]
d = {'city': 'Jinhua'}
func(*lis, **d)

通过可变参数传入一个list或tuple可以覆盖到前面的必选参数,默认参数。所以,对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。
使用*args**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。

7.递归函数
①用尾递归优化递归函数,防止栈溢出
②尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。
③Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题。

8.高级特性
①切片(slice)

L[0:3] or L[:3] //表示取List L 索引从0到3,但不包括3的元素,起始的索引值为0时可以省略

由于python支持`L[-1]取倒数第一个元素,所以也可以倒数切片

L[-n:] //表示取倒数的n个元素
注意 L[-n:-1] //取不到最后一个元素
L[:10:2] //表示前十个数,每两个取一个,假如list是0到99的整数,那么结果就是[0,2,4,6,8]
L[:] //什么都不写,表示复制原来的数组

字符串和tuple都可以进行切片操作

②迭代

python中任意可迭代对象,不管有没有下标都可以进行迭代。

d = {1: 'One', 2: 'Two'}
for key in d:
   print key

1
2

如果要迭代valuefor value in d.itervalues()
如果要迭代key和value for key,value in d.iteritems()
字符串也可以进行迭代

如何判断对象可迭代:
通过collections模块的Iterable类型判断:

from collections import Iterable
isInstance('abc', Iterable)

如果想要同时迭代索引值,使用enumerate把list(或者tuple,str)变成索引-值对

for i,value in enumerate(['A', 'B', 'C']):
    print i,value

0 A
1 B
2 C
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值