【相关功能函数说明】点击打开链接
1、绝对值:abs( ) /针对整数
fabs()/针对浮点数
>>> abs(100)
100
>>> abs(-20)
20
2、最大值:max( )
>>> max(1, 2)
2
>>> max(2, 3, 1, -5)
3
3、类型转换:int()、float( )、str( )
4、转十六进制:hex( )
n1=input('输入一个数')
n1=int(n1)
s=hex(n1)
print('%d的十六进制是%s'%(n1,s))
5、定义函数:def
看做一个函数体 要有函数名 括号 参数 冒号 返回值(return)
def my_abs(x):
if x >= 0:
return x
else:
return -x
** 把a( ) 的函数定义保存为xxx.py,在交互模式下要导入写好的函数:from xxx import a
6、空函数:pass
还没想好怎么写 用作占位符
def pop():
pass
7、判断变量类型,数据类型检查:isinstance()
def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
8、导入math包:import math
这样可以使用sin cos这类函数
【小结】
定义函数时,需要确定函数名和参数个数;
如果有必要,可以先对参数的数据类型做检查;
函数体内部可以用return
随时返回函数结果;
函数执行完毕也没有return
语句时,自动return None
。
函数可以同时返回多个值,但其实就是一个tuple。
9、默认参数:
def power(x, n=2): #防止缺少参数而无法调用的情况
**必须指向不变的对象
10、可变参数:在参数前面加*号,允许传入多参数,组装成tuple
#不可变
def calc(numbers):
>>>clac([1,2,3])
#可变
def calc(*numbers):
>>>clac(1,2,3)
nums=[1,2,3]
clac(*nums)
11、关键字参数:加**号,允许传入多个含参数名的参数,组装成dict
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
【小结】
*args
是可变参数,args接收的是一个tuple;
**kw
是关键字参数,kw接收的是一个dict。
以及调用函数时如何传入可变参数和关键字参数的语法:
可变参数既可以直接传入:func(1, 2, 3)
,又可以先组装list或tuple,再通过*args
传入:func(*(1, 2, 3))
;
关键字参数既可以直接传入:func(a=1, b=2)
,又可以先组装dict,再通过**kw
传入:func(**{'a': 1, 'b': 2})
。
使用*args
和**kw
是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。
12、递归函数:函数在内部调用自身本身
**栈溢出:函数调用是通过栈(stack)实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。
栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。(任何递归函数都存在栈溢出的问题)
【练习】
1、请定义一个函数quadratic(a, b, c)
,接收3个参数,返回一元二次方程:ax2 + bx + c = 0的两个解。
#!/usr/bin/env python3
#coding=gbk
import math
def quadratic(a,b,c):
if not (isinstance(b,(int,float))and isinstance(a,(int,float)) and isinstance(c,(int,float))):
raise TypeError('wrong type')
if a==0:
return('此方程非一元二次')
elif (b*b-4*a*c)<0:
return('此方程无实根')
else:
s1=(-b+math.sqrt(b*b-4*a*c))/(2*a)
s2=(-b-math.sqrt(b*b-4*a*c))/(2*a)
return ('方程根为:%s%s'%(s1,s2))
a1=input('输入a:')
b1=input('输入b:')
c1=input('输入c:')
a1=float(a1)
b1=float(b1)
c1=float(c1)
x=quadratic(a1,b1,c1)
print(x)
#1,1,1:无解
#2,3,1:-0.5,-1.0
2、输入一个或多个数并计算乘积:
#!/usr/bin/env python3
#coding=gbk
def product(*args):
if len(args)==0:
return print('输入至少一个数')
else:
p=1
for i in args:
p=p*i
return p
print(product(1,2))
print(product())
print(product(3,2,10))
3、汉诺塔
#!/usr/bin/env python3
#coding=gbk
def move(n,a,b,c):
if n==1:
print(a,'-->',c) #只有1个 由a移动到c
else:
move(n-1,a,c,b) #有n个 将n-1从a移动到b
print(a,'-->',c) #将最后一个从a移动到c
move(n-1,b,a,c) #在把b上的移到c
n1=int(input('有几个圈'))
move(n1,'A','B','C')