Python学习笔记(二):函数

调用函数

abs()

max()

min()

hex()   整数转换成十六进制

数据类型转换

int()

float()

str()

bool()

定义函数

定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

def my_abs(x):

if not isinstance(x,(int,float)):

raise TypeError('bad operand type')

if x>=0:

return x

else:

return -x

return None 可以写为return

空函数

def nop():

pass

pass语句可以用作占位符。

参数检查

isinstance()

返回多个值

import math

 

def move(x, y, step, angle=0):

    nx = x + step *math.cos(angle)

    ny = y - step *math.sin(angle)

    return nx, ny

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

函数的参数

位置参数

函数的形参

默认参数

def power(x=2):

pass

默认是2,可以不填,与默认参数不一样就填参数

默认参数必须指向不可变对象

def add_end(L=None):

if(L==None):

L=[]

L.append('END')

return L

可变参数

1.把一个listtuple传进来

defcalc(numbers):

sum=0

for n in numbers:

sum=sum+n*n

return sum

 

calc([1,2,3])

2.参数前加一个* 函数内部接受到一个tuple,使用时可以传递任意数量的参数

defcalc(*numbers):

sum=0

for n in numbers:

sum=sum+n*n

return sum

 

calc(1,2,3)

关键字参数

可变参数允许传递0个或任意个参数,这些参数在函数内部自动组装成tuple,而关键字参数允许传递0个或任意个含参数名的参数,这些关键字参数在函数内部会自动组装成dict

def person(name, age, **kw):

    print('name:', name,'age:', age, 'other:', kw)

命名关键字参数

要限制关键字参数的名字,就可以使用命名关键字。

使用一个特殊分隔符**后的参数被视作命名关键字参数

def person(name,age,*,city,job):

       print('name:',name,'age:',age,'city:',city,'job:',job)

如果函数定义中已经有一个可变参数,后面的关键字参数就不需要一个特殊分隔符了

命名关键字参数必须要传入参数名,否则就会报错

参数组合

Python中定义函数,可以使用多种参数组合使用,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

递归函数

递归函数代替循环,但要注意防止栈溢出

def fact(n):

if(n==1):

return 1

return n*fact(n-1)

尾递归,函数返回时调用自身,并且return不能包含表达式

尾递归调用时,如果做了优化,栈不会增长,因此,无论多少次调用也不会导致栈溢出。

遗憾的是,大多数编程语言没有针对尾递归做优化,Python解释器也没有做优化

def fact(n):

return fact_iter(n,1)

 

def fact_iter(num,product):

if(num==1):

return 1

return fact_iter(num-1,num*product)

 

汉诺塔

defmove(n,a,b,c):

        if(n==1):

                print(a,'-->',c)

        else:

                move(n-1,a,c,b)

                move(1,a,b,c)

                move(n-1,b,a,c)

 

可将B柱视作A柱到C柱的缓冲区(Buffer

  1. A柱上的n-1个盘子通过C柱挪到B柱上
  2. A柱最下面的盘子通过B柱挪到C柱上
  3. 将之前的n-1盘子从B柱通过A柱挪到C柱上 


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值