python — 函数基础知识(二)
目录
1 返回值def func(arg): # .... return 9 # 返回值为9 默认:return None val = func('adsfadsf') # 1. 让用户输入一段字符串,计算字符串中有多少A字符的个数。有多少个就在文件a.txt中写多少个“李邵奇”。 def get_char_count(data): sum_counter = 0 for i in data: if i == 'A': sum_counter += 1 return sum_counter def write_file(line): if len(line) == 0: return False # 函数执行过程中,一旦遇到return,则停止函数的执行。 with open('a.txt',mode='w',encoding='utf-8') as f: f.write(line) return True content = input('请输入:') counter = get_char_count(content) write_data = "李邵奇" * counter status = write_file(write_data) if status: print('写入成功') else: print('写入失败') 函数没有返回值时,默认返回None。 函数内部执行过程中遇到return就终止。 def func1(): return "完成" # 函数每次执行到此,就返回;所以下面代码永远不执行。 for i in range(10): print(i) func1() def func2(): for i in range(10): print(i) return "完成" print(666) func2() # 只打印0 return可以返回任意值 特殊情况:return返回多个值时,返回的是元组,与返回值是元组时是一样的 def func(): return (1,2,3) v = func() print(v) # 特殊:返回元组 def func(): return 5,8,"alex" v = func() print(v) return的作用:a. 返回值 b.终止函数的执行 练习题 # 1. 写函数,计算一个列表中有多少个数字,打印: 列表中有%s个数字。 # 提示:type('x') == int 判断是否是数字。 # 方式一: def get_list_counter1(data_list): count = 0 for item in data_list: if type(item) == int: count += 1 msg = "列表中有%s个数字" %(count,) print(msg) get_list_counter1([1,22,3,'alex',8]) # 方式二: def get_list_counter2(data_list): count = 0 for item in data_list: if type(item) == int: count += 1 return count v = get_list_counter1([1,8]) msg = "列表中有%s个数字" %(v,) print(msg) # 2. 写函数,计算一个列表中偶数索引位置的数据构造成另外一个列表,并返回。 # 方式一: def get_data_list1(arg): v = arg[::2] return v data = get_data_list1([11,33,44,55,66]) # 方式二: def get_data_list2(arg): v = [] for i in range(0,len(arg)): if i % 2 == 0: v.append(arg[i]) return v data = get_data_list2([11,66]) # 3. 读取文件,将文件的内容构造成指定格式的数据,并返回。 """ a.log文件 alex|123|18 eric|uiuf|19 ... 目标结构: a. ["alex|123|18","eric|uiuf|19"] 并返回。 b. [['alex','123','18'],['eric','uiuf','19']] c. [ {'name':'alex','pwd':'123','age':'18'},{'name':'eric','pwd':'uiuf','age':'19'},] """ with open('a.log.txt',mode = 'r',encoding = 'utf-8') as f: data = f.read() print(data) def get_file(a): date1 = [] for i in a.split('n'): date1.append(i) return date1 v1 = get_file(data) print(v1) def get_file1(b): date2 = [] d = [] for i1 in b.split('n'): i1 = i1.split('|') d.append(i1) date2 += d return date2 v2 = get_file1(data) print(v2) def get_file2(c): date3 = [] e = {} for i2 in c.split('n'): i2 = i2.split('|') e['name'] = i2[0] e['pwd'] = i2[1] e['age'] = i2[2] date3.append(e) return date3 v3 = get_file2(data) print(v3)
2 作用域在python文件中:
总结:
补充:全局变量必须全部要大写 USER_LIST = [11,3] def func(): name = 'asdf' USER_LIST.append(12) USER_LIST.append(name) func() print(USER_LIST) 3 函数小高级
总结:函数当作一个变量:参数传值 / 当作元素嵌套到字典、列表中 4 函数中高级4.1 函数可以做返回值# 示例一 def func(): print(123) def bar(): return func v = bar() v() # 示例二 name = 'oldboy' def func(): print(name) def bar(): return func v = bar() v() # 示例三 def bar(): def inner(): print(123) return inner v = bar() v() # 示例四 name = 'oldboy' def bar(): name = 'alex' def inner(): print(name) return inner v = bar() v() # 示例五 name = 'oldboy' def bar(name): def inner(): print(name) return inner v1 = bar('alex') # { name=alex,inner } # 闭包,为函数创建一块区域(内部变量供自己使用,存储的代码),为他以后执行提供数据。 v2 = bar('eric') # { name=eric,inner } v1() v2() # 示例六 name = 'alex' def base(): print(name) def func(): name = 'eric' base() func() # {name=eric,} # 示例七 name = 'alex' def func(): name = 'eric' def base(): print(name) base() func() # 示例八 name = 'alex' def func(): name = 'eric' def base(): print(name) return base base = func() base() 注意:函数在何时被谁创建? 函数是由谁创建的,执行函数就从哪里开始找 # 练习题一 info = [] def func(): print(item) for item in range(10): info.append(func) info[0]() # 练习题二 info = [] def func(i): def inner(): print(i) return inner for item in range(10): info.append(func(item)) info[0]() info[1]() info[4]() 4.2 闭包def func(name): def inner(): print(name) return inner v1 = func('alex') v1() v2 = func('eric') v2() 返回值——分析函数执行的内存。(闭包是内存其中的一种) # 并不是闭包 def func(name) def inner(): return 123 return inner # 是闭包需要满足两个条件:1.封装值 2.内层函数需要使用 def func(name) def inner(): print(name) return 123 return inner 4.3 高阶函数
4.4 小总结
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |