python 函数

python调用函数

#
#绝对值
abs(-21)
#最大值
max(2,4,5,6,7)
#数据类型转换
int('123')
float('12.23')
str(1.23)
bool(1)
hex(123)
print(hex(123))
#结果是false

#自定义函数
def myabs(x):
    if x >= 0:
        return x
    else:
        return -x
print(myabs(-21))


#可以用pass占位,让代码先运行起来
#if age >= 18:
#   pass

python函数参数

#返回多个值
import numpy as np
import math
#both support cos/sin calculation
def move(x,y,step,angle=0):
#angle=0,是默认参数,当没有设置angle的值得时候,默认为2.
    nx = x + math.cos(angle)
    ny = y + np.sin(angle)
    return nx,ny
#返回多个值,实际上是一个tuple
r = move(100,100,60,math.pi/6)
print (r)

#practice:
def quadratic (a,b,c):
    x=-b+math.sqrt(b**-4*a*c)
    y=-b+math.sqrt(b**-4*a*c)
    return(x,y)
answer=quadratic(1,2,1)
print(answer)

#默认参数:
#   默认参数应该在位置参数后定义。
#   默认参数所有的值应该为固定变量,否则多次迭代时会出错
def add_end(L=[]):
    L.append('End')
    return L
a=add_end()
print("first irration result when default value is '[]': "+str(a))
b=add_end()
print("second irration result when default value is '[]': "+str(b))


def add_end(L=None):
    if L==None:
        L=[]
    else:
        L.append('End')
c=add_end()
print("first irration result when default value 'None': "+str(c))
d=add_end()
print("second irration result when default value 'None': "+str(d))

#可变参数传入函数
#1,把参数作为list或者tuple传入
def calsum(numbers):
    sum=0
    for n in numbers:
        sum=sum+n
    return sum
a=calsum([1,2,3])#as list
print(a)
b=calsum((1,2,3))#as turple
print(b)
#2, 直接定义可变参数函数
def calsum1(*numbers):
    sum=0
    for n in numbers:
        sum=sum+n
    return sum
a=calsum1(1,2,3)
print(a)
#   若已知已经有一个list或者turple
number=(1,2,3)
b=calsum1(*number)
print(b)
#可以有一种繁琐的写法= =
c=calsum1(number[0],number[1],number[2])
print(c)


#关键词参数 **+anyword
#可以传入0个或任意个参数名的参数,作为输入参数的扩展,以dic的形式储存在anyword中
#eg
def person(name, age, **kw):
    print("name is:",name,"age is:",age,"other:",kw)
    #可以只传入必要参数name和age,也可以传入其他参数,保存在kw中
personinfo=person('gakki',29,height=170,score=100)
print (personinfo)
#running result>name is: gakki age is: 29 other: {'height': 170, 'score': 100}  
#在已经存在dic数据时,也开始直接传入dic类型的变量
gakki={'height':170,'score':100}
personinfo=person('gakki',29,**gakki)
print(personinfo)

#命名关键字参数*,+关键字
def person(name,age,*,height,score):
    print ('name is:',name,'age is',age, height, score)
personinfo=person('gakki',29,height=170,score=100)
#height和score是关键字参数,如果输入的参数不是height和score,都被当做位置参数
#person(gakki,29,month=6) 会报错

#关键字参数和命名关键字参数可以重合使用
def person(name,age,*args,**kw):
#*args接受一个tuple,kw接受一个dic.建议使用惯用写法
    pass

递归函数

#python 递归函数
#sample:
def multi(n):
    if n==1:
        return 1
    return n*multi(n-1)
a=multi(5)
print(a)
#计算机中函数调用通过栈stack来实现,每进入一个函数调用,就会加一层栈帧
#由于栈的大小有限,递归调用次数过多会导致栈溢出
#解决方法是,通过尾递归优化

#尾递归:函数return时调用自身,并且return语句不包含表达式
#sample

def multi_inter(n,product):
    if n==1:
        return product
    else:
        return multi_inter(n-1,n*product)
def multi(n):
    return multi_inter(n,1)
a=multi(5)
print(a)
#尾递归和循环等价,然而python标准解释器没有针对尾递归的优化,==总是存在溢出问题,真棒

def move(n,a,b,c):
    if n==1:
        print('move',a,'--->',c)
    else:
        move(n-1,a,c,b)
        move(1,a,b,c)
        move(n-1,b,a,c)
move(5,'A','B','C')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值