Python函数相关

【相关功能函数说明】点击打开链接

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')


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值