2020-10-07(函数中)

    科技2024-08-07  34

    1.函数的返回值

    • 返回值就是函数执行以后返回的结果 • 通过return来指定函数的返回值 • return后面可以跟任意对象,返回值甚至可以是一个函数

    # 函数的返回值 # • 返回值就是函数执行以后返回的结果 # • 通过return来指定函数的返回值 # • return后面可以跟任意对象,返回值甚至可以是一个函数 def fn_sum(*args): r = 0 for i in args: r+=i return r sumsa = fn_sum(1,2,3,4,5) print(sumsa) def fn(): def fn1(): print("第二个子函数") return fn1() sumsa = fn() print(sumsa) #第二个子函数 None def fn(): def fn1(): print("第二个子函数") return {'a':123} return #None sumsa = fn() print(sumsa) #第二个子函数 None # 当你不写return 或者 写一个return 时候,返回值是 None def fn(): def fn1(): print("第二个子函数") return {'a':123} #{'a': 123} return fn1() # 第二个子函数 sumsa = fn() print(sumsa) #在函数中return后面的代码块不再执行 def fn(): def fn1(): print("第二个子函数") return {'a':123} #{'a': 123} return fn1() # 第二个子函数 print("12321321") #在函数中return后面的代码块不再执行

    2.文档字符串

    • help()是Python中内置函数,通过help()函数可以查询Python中函数的用法 • 在定义函数时,可以在函数内部编写文档字符串,文档字符串就是对函数的说明

    def fn1(a,b,c): """ fn 函数的说明 :param a: 形参a 说明 :param b: 形参b 说明 :param c: 形参c 说明 :return: 返回值说明 """ help(fn1(1,2,3)) help(fn1) #end : 字符串附加在最后一个值之后,默认为换行符。 print('ss',end='') print('ss1') print('ss2') # sep: 字符串插入值之间,默认为空格。 print("I'm a tester.","hello python","good",sep='¥',end='@@\n') #file: 设置输出设备,及把print中的值打印到什么地方,默认输出到准端,可以设置 ## file = 文件储存对象,把内容存到该文件中,如下: f = open('test.txt', 'w') print('hello world', file=f) f.close() #flush=False ##该参数主要是刷新, 默认False,不刷新,Ture时刷新 f = open('test.txt', 'w') print('hello world',file=f,flush=True) help(print)

    3.函数的作用域

    • 作用域(scope) • 作用域指的是变量生效的区域 • 在Python中一共有两种作用域 • 全局作用域 • 全局作用域在程序执行时创建,在程序执行结束时销毁 • 所有函数以外的区域都是全局作用域 • 在全局作用域中定义的变量,都是全局变量,全局变量可以在程序的任意位置进行访问 • 函数作用域 • 函数作用域在函数调用时创建,在调用结束时销毁 • 函数每调用一次就会产生一个新的函数作用域 • 在函数作用域中定义的变量,都是局部变量,它只能在函数内部被访问

    # global 使用后在函数内部也能影响外部 a = 123 b = a def fn(): global a #加上 global 后就影响全部的 a = 456 print("函数内部a =%s"%a) print("函数内部b =%s"%b) fn() print("函数外部a =%s"%a) print("函数外部b =%s" % b)

    4.命名空间

    • 命名空间实际上就是一个字典,是一个专门用来存储变量的字典 • locals()用来获取当前作用域的命名空间 •如果在全局作用域中调用locals()则获取全局命名空间,如果在函数作用域中调用locals()则获取函数命名空间 • 返回值是一个字典

    # a = 1 # b = 2 # c = 3 # scope = locals() # print(scope) def fn(): a = 1 b = 2 c = 3 scope = locals() print(scope) # {'a': 1, 'b': 2, 'c': 3} # globals()# {······} go = globals() # 获取全局作用域 print(go) fn()

    5.递归函数

    • 递归是解决问题的一种方式,它的整体思想,是将一个大问题分解为一个个的小问题,直到问题无法分解时,在去解决问题 • 递归式函数有2个条件 • 1. 基线条件 问题可以被分解为最小问题,当满足基线条件时,递归就不执行了 • 2. 递归条件 可以将问题继续分解的条件

    # 利用递归 求 10 的阶乘 # n = 10 # for i in range(1,n): # n *=i # print(n) # 3628800 #利用 递归思想 def fn(n): if n == 1: return 1 return n * fn(n-1) result = fn(10) print(result) # 3628800 # 利用递归函数判断一个字符串是否是回文字符串 ### eg : 'abcdcba' 就是回文字符串 #分析 abcdefgfedcba def Judgment_str(str1): if len(str1) < 2: return True elif str1[0] != str1[-1]: return False return Judgment_str(str1[1:-1]) print(Judgment_str('abcdgdcba'))

    6.作业练习

    题目一:用函数实现一个判断用户输入的年份是否是闰年的程序 1.能被400整除的年份 2.能被4整除,但是不能被100整除的年份 以上2种方法满足一种即为闰年

    def a_specific_year_Judgment(): while True: year = int(input("输入一个年份: ")) if year < 1000 or year>10000: print("输入的{0} 年份不适宜判断了".format(year)) break else: if (year % 4) == 0: if (year % 100) == 0: if (year % 400) == 0: print("{0} 是闰年".format(year)) # 整百年能被400整除的是闰年 else: print("{0} 不是闰年".format(year)) else: print("{0} 是闰年".format(year)) # 非整百年能被4整除的为闰年 else: print("{0} 不是闰年".format(year)) a_specific_year_Judgment()

    题目二:猴子吃桃问题(递归): 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了,求第一天共摘了多少桃子?

    # x - x * 0.5 + 1 # 第一天 # x - x * 0.5 + 1 - (x - x * 0.5 + 1) * 0.5 + 1 # 第二天 # (x - x * 0.5 + 1 - (x - x * 0.5 + 1) * 0.5 + 1) *0.5 +1# 第三天 # 第九天 x - (x*0.5 +1) =1 即 x - 0.5x -1 =1 反推到底第九天有几个桃子 # 第十天 只剩一个桃子 # 假设有 x 个桃子 def houzi_Peaches(day): #递归得到一共有多少个桃子 if day == 1: # 基数条件是天数 return 1 # 最后返回一个桃子 return houzi_Peaches(day-1)*2+2 taozi = houzi_Peaches(10) print(taozi) # 1 4 10 # 10 1 # 9 1*2+2 4 # 8 (1*2+2) * 2 +2 10 # 7 ((1*2+2) * 2 +2) * 2 +2 22 # 6 22 * 2 +2 46 # 5 46 * 2 +2 94 # 4 94 * 2 +2 190 # 3 190 * 2 +2 382 # 2 382 * 2 +2 766 # 2 766 * 2 +2 1534 nums = 1 for i in range(1,11): nums=nums*2+1+1 print(nums)
    Processed: 0.010, SQL: 8