Python基础(第七章)

Python基础(第七章)_第1张图片
" 如果是为了我所爱的人、我愿戴上这罪恶之冠 "

Python基础(内容基于逻辑教育Cheney课程)

  • 1、函数
    • 1.1、函数的返回值
    • 1.2、函数的嵌套
    • 1.3、函数不写return或其后不跟数据
    • 1.4、函数return后面的代码不会执行
  • 2、文档字符串
  • 3、函数的作用域
  • 4、命名空间
  • 5、递归函数
    • 5.1、求10的阶乘
    • 5.2、求n的m次幂
    • 5.3、判断回文字符串
  • 6、程序举例
    • 6.1、题一
    • 6.2、题二

1、函数

1.1、函数的返回值

函数的返回值(原因及特点)

  1. 想拿到函数的运行结果、而不是单纯的打印这个结果
  2. 必须写 return xxx
  3. 如果写 return 和什么都不写、函数的返回值是None
  4. 函数的调用等于函数的返回值
  5. 任何类型的值都可以作为函数的返回值来返回
@1
# 在主函数里用一个变量来接收函数的返回值
def fun(*a):
	r = 0
	for i in a:
		r += i
	return r
result = fun(1,2,3,4)
# 再去对变量做操作
result += 4
print(result)

输出:14

1.2、函数的嵌套

  1. print函数输出fun1()、返回值为fun2、然后调用fun2()、输出111
  2. @1 fun2()没有返回值、所以作为空处理(None)
  3. @2 fun2()有返回值、返回其返回值(112)
@1
def fun1():
    def fun2():
        print(111)
    return fun2
print(fun1()())

输出:
	111
	None

@2
def fun1():
    def fun2():
        print(111)
        return 112
    return fun2
print(fun1()())

输出:
	111
	112

1.3、函数不写return或其后不跟数据

@1
def fun():
    return
print(fun())

输出:None

@2
def fun():
    pass
print(fun())

输出:None

1.4、函数return后面的代码不会执行

def fun():
    return 1
    print(111)
print(fun())

输出:1

2、文档字符串

文档字符串

  1. help()是Python中的内置函数、通过help()可以直接查询Python中函数的用法
  2. 函数 .__ doc __的方法也可以查询文档字符串信息
  3. 在定义函数时、可以在函数内部编写文档字符串、文档字符串就是对函数的说明
def printMax(x,y):
    '''
    打印两个数中的最大值。
    两个值必须都是在整型数。
    '''
    x = int(x)
    y = int(y)
    if x > y:
        print(x,'最大')
    else:
        print(y,'最大')

@1 
printMax(3,5)
@2 
print(printMax.__doc__)
@3 
help(printMax)

输出:
	@1
	5 最大
	@2
	打印两个数中的最大值。
    两个值必须都是在整型数。
    @3
    Help on function printMax in module __main__:
    printMax(x, y)
    打印两个数中的最大值。
    两个值必须都是在整型数。

3、函数的作用域

函数的作用域

  1. 作用域指的是变量生效的区域
  2. Python中分为二种作用域
  3. 全局作用域和函数作用域

全局作用域

  1. 全局作用域在程序执行时创建、在程序结束时销毁
  2. 所有函数以外区域都是全局作用域
  3. 在全局作用域中定义的变量都是全局变量
  4. 全局变量可以在程序的任意位置访问

函数作用域

  1. 函数作用域在函数调用时创建、在函数结束调用时销毁
  2. 函数每调用一次就会产生一个新的函数作用域
  3. 在函数作用域中定义的变量、都是局部变量、只能在函数内部被访问
@1 在函数内声明全局变量
def fun1():
    global  a
    a = 20
    def fun2():
        print(a)
    fun2()
fun1()
print(a)

输出:
	20
	20

4、命名空间

命名空间

  1. 命名空间实际上就是一个字典、是一个专门用来存储变量的字典
  2. local()用来获取当前作用域的命名空间
  3. 如果在全局作用域中调用local()则获取全局命名空间
  4. 如果在函数作用域中调用local()则获取函数命名空间
  5. 返回值是一个字典
@1 获取全局命名空间
a = 1
b = 2
c = 3
d = 4
print(locals())

输出:
	 {
     ...,'a': 1, 'b': 2, 'c': 3, 'd': 4}

@2 获取函数命名空间	
def fun():
    a = 1
    b = 2
    c = 3
    d = 4
    space = locals()
    print(space)
fun()		

输出:{
     'd': 4, 'c': 3, 'b': 2, 'a': 1}

@3 获取函数内的全局命名空间
e = 5
def fun():
    a = 1
    b = 2
    c = 3
    d = 4
    space = globals()
    print(space)
fun()

输出:{
     ..., 'e': 5}

5、递归函数

递归函数

  1. 递归是解决问题的一种方式
  2. 整体思想是将一个大问题分解为一个个小的问题
  3. 直到问题无法分解时、再去解决问题
  4. 二个条件(基线条件和递归条件)
  5. 基线条件、问题可以被分解为最小问题
  6. 递归条件、可以将问题继续分解的条件

5.1、求10的阶乘

@1 普通函数
def fun(a):
    for i in range(1,10):
        a *= i
    return a
print(fun(10))

输出:3628800

@2 递归函数
def fun(n):
	# 基线条件
    if n == 1:
        return 1
    else:
    # 递归条件
        return n * fun(n - 1)
print(fun(10))

输出:3628800

5.2、求n的m次幂

@1 普通函数
def fun(n,m):
    for i in range(1,m):
        n *= n
    return n
print(fun(5,2))

输出:25

@2 递归函数
def fun(n,m):
    if m == 1:
    # 基线条件
        return n
    else:
    # 递归条件
        return n * fun(n,m-1)
    return n
print(fun(5,3))

输出:125

5.3、判断回文字符串

def fun(a):
    # 基线条件
    if len(a) == 1 or len(a) == 0:
        return True
    elif a[0] != a[-1]:
        return False
    # 递归条件
    return fun(a[1:-1])

a = input(":")
if len(a) < 2:
    print("too short")
else:
    print(fun(a))

6、程序举例

6.1、题一

# 用函数实现一个判断用户输入的年份是否是闰年的程序
# 1.能被400整除的年份
# 2.能被4整除、但是不能被100整除的年份
# 以上方法满足一种即为闰年
def fun(n):
    if n % 400 == 0 or (n % 4 == 0 and n % 100 != 0):
        print("闰年")
    else:
        print("非闰年")

fun(2015)
fun(2000)
fun(2016)

输出:
	非闰年
	闰年
	闰年	

6.2、题二

# 猴子吃桃问题(递归)
# 猴子第一天摘下若干个桃子、当即吃了一半、还不瘾、又多吃了一个
# 第二天早上又将剩下的桃子吃掉了一半、又多吃了一个
# 以后每天早上都吃了前一天剩的一半加上一个
# 第十天早上再吃的时候、见只剩一个桃子
# 求一共摘了多少桃子
def monkey_tao(n):
    if n>10 or n<1:
        return
    elif n==10:
        return 1
    else:
        return (monkey_tao(n+1)+1)*2
print (monkey_tao(1))

输出:1534

你可能感兴趣的:(Python,python,字符串,数据结构,编程语言)