Fork me on GitHub

python函数—调用函数+定义函数

抽象

函数就是最基本的一种代码抽象的方式。

调用函数

可以通过help(abs)查看abs函数的帮助信息

abs(x)  : return position number
# 常见报错:abs() takes exactly one argument (2 given        )abs()有且仅有1个参数, 不能为两个
# TypeError: bad operand type for abs(): 'str' str是错误的参数类型
max() : return the max of the argument
# max()可以接收任意多个参数,并返回最大的那个
int() ,float() ,bool(), str() ,float()
#常用函数还包括数据类型转换函数,可以把其他数据类型转换为对应类型

# 函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:
a = max
print(a(1,2,3))

# hex()函数把一个整数转换成十六进制表示的字符串
print(hex(123))
#0x7b

print(sum([1,2,3,4]))
#10 这里参数要一个列表集合

定义函数

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

def boolean_position_num(x):
    if x >= 0 :
        return True
    else :
        return False

print(boolean_position_num(int(input())))

函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。
如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return

def boolean_position_num(x):
    if x >= 0 :
       print('position num')
    else :
        print('not position num')
# 默认return None

print(boolean_position_num(int(input())))
# 10  None

命令行格式

#调用别的文件里的函数
# main.py
from func import boolean_position_num
print(boolean_position_num(int(input())))

# func.py
def boolean_position_num(x):
    if x >= 0 :
       print('position num')
    else :
        print('not position num')

空函数

#定义一个什么事也不做的空函数,可以用pass语句
def non():
    pass
#pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。不加pass就会报错
if x >= 18:
     pass

参数检查

TypeError: my_abs() takes 1 positional argument but 2 were given : 参数数量不对
自己写的函数跟内置函数的区别为:自己写的函数很多都不能支持其他的数据类型,内置函数可以
数据类型检查可以用内置函数isinstance()实现:

def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')        
    if x >= 0:
        return x
    else:
        return -x

返回多个值? 只是返回一个tuple值 Python函数返回的仍然是单一值。

用途:在游戏中经常需要从一个点移动到另一个点,给出坐标、位移和角度,就可以计算出新的坐标:

def return_nums(x , y):
    return int(x),int(y)
if __name__ == '__main__':
    print(return_nums(1,2))
# (1 , 2)

小结

定义函数时,需要确定函数名和参数个数;
如果有必要,可以先对参数的数据类型做检查;
函数体内部可以用return随时返回函数结果;
函数执行完毕也没有return语句时,自动return None。
函数可以同时返回多个值,但其实就是一个tuple。

练习

ax^2+bx+c=0

from cmath import sqrt
def quadratic(a, b, c):
    a = float(a)
    b = float(b)
    c = float(c)
    temp = pow(b, 2) - 4 * a * c
    if temp<0 :
        print('该方程无解')
    x1 = (-b + (sqrt(temp))) / (2 * a)
    x2 = (-b - (sqrt(temp))) / (2 * a)
    if temp == 0:
        print('该方程只有一个解')
        return x1
    return x1, x2
if __name__ == '__main__':
    print('quadratic(2, 3, 1) =', quadratic(2, 3, 1))
    print('quadratic(1, 3, -4) =', quadratic(1, 3, -4))

    if quadratic(2, 3, 1) != (-0.5, -1.0):
        print('测试失败')
    elif quadratic(1, 3, -4) != (1.0, -4.0):
        print('测试失败')
    else:
        print('测试成功')
-------------------------------------------------------------------------------
import cmath
def quadratic(a,b,c):

     if not (isinstance(a,(int,float) ) and isinstance(b,(int,float)) and isinstance(c,(int,float)) ):

         raise TypeError('bad operation type')

     elif b**2-4*a*c < 0 :

         print('该方程没有实数解')

     else :

         x1 = (-b + math.sqrt(b**2-4*a*c))/(2*a)

         x2 = (-b - math.sqrt(b**2-4*a*c))/(2*a)

         return x1, x2

print(quadratic(3,5,1))

print(quadratic(a,c,1))
posted @ 2019-07-31 14:27  cznczai  阅读(10496)  评论(0编辑  收藏  举报