day_007 Python中的函数相关内容

2018-07-25  本文已影响0人  HavenYoung

一、返回值

# 声明函数
def func1():
    print('lkjf')

# 调用函数  函数表达式
value1 = func1()
print(value1)

def func2(a, b):
    return a + b

print(func2(1, 2))

示例:

# 练习:写一个函数,判断指定的年龄是否属于成年

def adult_tell(age):
    if age<0:
        return '请输入正确的年龄!'
    if age>=18:
        return '成年人'
    if age<18:
        return '未成年'

age = int(input('请输入年龄:'))

print(adult_tell(age))

结果:

请输入年龄:20
成年人

练习:写一个函数,求1+2+3+...+n,和不能大于10000

def func3():
    sum1 = 0
    num1 = 1
    while True:
        if sum1 + num1 >= 10000:
            # python中函数可以有多个返回值,返回多个值时值为元组
            return sum1, num1-1
        sum1 += num1
        num1 += 1

print(func3())

结果:

(9870, 140)

二、作用域

全局变量

# 全局变量
a = 10

print(a)

def func1():
    print(a)

func1()

for _ in range(4):
    # 特殊的,在Python中的for循环中声明的变量也是全局变量
    b = 100
    print(a)

print('-'*20)
print(b)

def func2():
    print(b)

func2()
print('-'*20)

结果:

10
10
10
10
10
10
--------------------
100
100
--------------------

局部变量

# 局部变量
def func3():
    # 局部变量,作用域在函数内
    c = 200

global

"""
global 变量1:在函数中声明 变量1 是一个全局变量
格式:
global 变量名
变量名 = 值
"""

# 全局变量
d = 'd'
e = 'e'
def func4():
    # 局部变量
    d = 'b'
    print(d)

    # 说明e是一个全局变量
    global e
    e = 'E'
    print(e)

func4()
print(d)
print(e)
print('-'*20)

结果:

b
E
d
E

nonlocal

"""
nonlocal:在函数中声明函数的时候,才需要使用
"""

def func11():
    a_11 = 10

    print('外部',a_11)

    # python中函数里面可以声明函数
    def func12():
        nonlocal a_11
        a_11 = 100
        print('内部', a_11)

    func12()
    print('外部', a_11)

func11()

结果:

外部 10
内部 100
外部 100

三、匿名参数

# 写一个函数,计算2个数的和
# 一般函数
def my_sum1(a, b):
    return a+b

print(my_sum1(10, 20))

# 匿名函数
my_sum2 = lambda a, b: a+b

print(my_sum2(10, 20))

结果:

30
30

示例:

"""
i = (0, 1, 2, 3, 4)
i = 0
funcs = [lambda x:x*0]
i = 1
funcs = [lambda x:x*1, lambda x:x*1]
···
i = 4
funcs = [lambda x:x*4, lambda x:x*4, lambda x:x*4, lambda x:x*4]
"""
#
funcs = []
for i in range(5):
    # i是全局变量
    funcs.append(lambda x:x*i)

print(funcs[2](2))
print(funcs[4](2))
print(i)

结果:

8
8
4

四、函数变量

a = 10
a = 'a'
print(a)

def func1(a):
    print(a)
    return 100

print(func1, type(func1))
print('-'*20)

结果:

a
<function func1 at 0x000002002C5AD1E0> <class 'function'>

将函数func1赋给b,这个时候b就是一个函数了

b = func1
b(10)
print(b)

print('-'*20)

c = func1(10)
print(func1(10))

结果:

10
<function func1 at 0x000002002C5AD1E0>
--------------------
10
10
100

将函数func1作为列表的元素

functions = [func1]
functions[0]('啊啊啊')

结果:

啊啊啊

将函数作为参数

def my_sum(*numbers):
    sum1 = 0
    for item in numbers:
        sum1 += item
    return sum1

def my_mul(*numbers):
    sum1 = 1
    for item in numbers:
        sum1 *= item
    return sum1

def operation(method, x, y):
    """
    method = my_sum
    x, y = 1, 2
    return = my_sum(numbers)
    :param method: function
    :param numers: tuple
    :return:
    """
    return method(x, y)

result1 = operation(my_sum, 1, 2)
print(result1)
result2 = operation(my_mul, 2, 3)
print(result2)
result3 = operation(lambda x,y:x>y, 10, 11)
print(result3)

结果:

3
6
False
20

在c中有三目运算符:
表达式?值1:值2
在Python中相同功能的方法是:
值1 if 表达式 else 值2 ---- 判断表达式是否为True,为True整个表达式是值1,否则为值2

print(10 if 10>20 else 20)

结果:

20

将函数作为函数的返回值

def get_method(char):
    if char == '+':
        return lambda x,y:x+y
    elif char == '*':
        return lambda x,y:x*y
    elif char == '>':
        def func1(x, y):
            return x > y
        return func1
    else:
        def func(x, y):
            return None
        return func


print(get_method('+')(2, 3))
print(get_method('*')(2, 3))

结果:

5
6

五、递归

写一个函数实现:1+2+3+···+n

def recursion_sum(n):
    # 找到临界值
    if n == 1:
        return 1
    # 找到my_sum1(n)和my_sum1(n-1)的关系
    """
    my_sum(n) = 1+2+3+···+n-1+n
    my_sum(n-1) = 1+2+3+···+n-1
    my_sum(n) = my_sum(n-1)+n
    
    """
    return recursion_sum(n-1)+n

print(recursion_sum(10))

结果:

55

用递归求246···n(n是偶数)

def recursion_mul(n):
    if n%2:
        print('参数错误!')
        return
    if n==2:
        return 2
    else:
        return recursion_mul(n-2)*n

print(recursion_mul(6))

结果:

48

用递归实现以下功能
n = 3

***
**
*

n = 4

****
***
**
*

关系:先打印n个*,在打印f(n-1)

def recursion_print(n):
    if n == 1:
        print('*')
        return
    else:
        print('*'*n)
        return recursion_print(n-1)

recursion_print(5)

结果:

*****
****
***
**
*

反向的

def print_star(n):
    if n == 1:
        print('*')
        return
    print_star(n-1)
    print('*'*n)

print_star(5)

结果:

*
**
***
****
*****
上一篇 下一篇

猜你喜欢

热点阅读