(四)Python 函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24459491/article/details/84489281

func.py
abstest.py

# 1.内置函数 Built-in Function

# Python内置了很多有用的函数,我们可以直接调用。

# 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数。可以直接从Python的官方网站查看文档:

# http://docs.python.org/3/library/functions.html#abs

# 也可以在交互式命令行通过help(abs)查看abs函数的帮助信息。

print(abs(100)) # 100
print(abs(-20)) # 20
print(abs(12.34)) # 12.34

print(max(2, 3, 1, -5)) # 3

print(int('123')) # 123
print(int(12.34)) # 12
print(float('12.34')) # 12.34
print(str(1.23)) # '1.23'
print(str(100)) # '100'
print(bool(1)) # True
print(bool('')) # False



# 2. 定义函数
def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x

# 如果你已经把my_abs()的函数定义保存为abstest.py文件了,那么,可以在该文件的当前目录下启动Python解释器,
# 用from abstest import my_abs来导入my_abs()函数,注意abstest是文件名(不含.py扩展名)
from abstest import my_abs
print(my_abs(-9))



# 3. 空函数
def nop():
    pass

# pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,
# 就可以先放一个pass,让代码能运行起来。

# pass还可以用在其他语句里,比如:
num = 20
if num > 18:
	pass
else:
	print('num <= 18')



# 4. 返回多个值
import math
def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny

print(move(1, 2, 1, 60)) # (0.04758701958484368, 2.3048106211022166) 返回多值其实就是返回一个tuple
x, y = move(1, 2, 1, 60)
print(x, y) # 0.04758701958484368, 2.3048106211022166, tuple赋值给变量时会自动展开



# 5. 默认参数
def power(x, n=2):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

print(power(3)) # 9


def func(x, a=2, b=3, c=4):
    print(x, a, b, c)

# 指定默认参数
func(1, b=1) # 1 2 1 4



# 6. 可变参数, 变长参数, 打印可以看到参数列表也是一个tuple
def func(*params):
    print(len(params)) # 4
    print(params) # (1, 2, 3, '4')

func(1, 2, 3, '4')


# 7. 关键字参数
def func(a, b, c, **params):
    print(params)

func(1, 2, 3, i='a', j=10)  # {'i': 'a', 'j': 10}, 传入自定义参数时自动组装成dict

d={'n':'a', 'm':11}
func(1, 2, 3, **d) # {'n': 'a', 'm': 11}, 也可以传入定义好的dict,记住前面加**




# 练习,组合各种类型参数
def func(a, b, c=10, *args, **kw):
    print(a, b, c, args, kw)

func(1, 2, 3, 4, 5, 6, aa=7, bb=8) # 1 2 3 (4, 5, 6) {'aa': 7, 'bb': 8}



# 8. 递归函数
# 在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
# 求和[1-5]
# a. 循环写法
def func():
    sum = 0
    for num in range(1,6):
        sum = sum + num
    return sum

print(func()) #15

# b. 递归写法
def func(num):
    if num==0:
        return num
    return num + func(num-1)

print(func(1000)) # 15

# func(5)
# 5 + func(4)
# 5 + (4 + func(3))
# 5 + (4 + (3 + func(2)))
# 5 + (4 + (3 + (2 + func(1))))
# 5 + (4 + (3 + (2 + 1)))


# 注意:func(1000) 会有报错 RuntimeError: maximum recursion depth exceeded in comparison
# 使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,
# 每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,
# 所以,递归调用的次数过多,会导致栈溢出。

# 能用循环的尽量用循环,递归深度不大的可以用递归

猜你喜欢

转载自blog.csdn.net/qq_24459491/article/details/84489281