Python学习笔记

1、Python函数参数

函数默认参数必须是不变对象

def my_function(L=[]):

L.append('end')

return L

因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。

所以定义默认参数应该使用不变对象

def my_function(L=None):

if L is None:

L = []

L.append('end')

return L

#可变参数(传入参数的个数是可变的)
def my_sum1(*num):
sum = 0
for i  in num:
sum = sum + i
return sum
print my_sum1(*num1)


#关键字参数
def person(name,age,**kw):
print 'name:',name,'age:',age,'other:',kw


di = {'city':'hunan','university':'shang'}
person('lshen',20,city='beijing',height=170)
person('mark',22,**di)


2、使用自定义函数

导入Python文件夹中的test.py文件

>>> import os
>>> os.chdir('/Users/XXX/Documents/Code/Python')
>>> import test

注意这个路径不能有中文,路径是文件夹,import不带.py然后就可以直接调用test.py文件中的cal()函数。

>>> import test
>>> a = [1,2,3,4,5]
>>> test.cal(*a)
55

如果源文件有修改,需要

>>> import imp
>>> imp.reload(test)

3、递归函数优化--尾递归

当编译器检测到一个函数调用是尾递归的时候,它就覆盖当前的活动记录而不是在栈中去创建一个新的。编译器可以做到这点,因为递归调用是当前活跃期内最后一条待执行的语句,于是当这个调用返回时栈帧中并没有其他事情可做,因此也就没有保存栈帧的必要了。通过覆盖当前的栈帧而不是在其之上重新添加一个,这样所使用的栈空间就大大缩减了,这使得实际的运行效率会变得更高。

def fact_iter(num,product=1):
if num == 1:
return product
return fact_iter(num-1,num*product)


4、切片

# 语法,start 和 stop 是列表下标,包含 start 下标的元素,不包含 stop 下标的元素,step 是步进,即每次取元素的步长,默认值是 1
L[start:stop:step]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值