学习视频: https://www.bilibili.com/video/BV1SE411N7Hi?p=55
作业:https://gitee.com/old_boy_education_python_28/teaching_plan/issues/I16FND
以下内容仅供个人学习使用,侵删
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 1.
# 请写出下列代码的执行结果:
# 例一:
#
def func1():
print('in func1')
def func2():
print('in func2')
ret = func1
ret()
ret1 = func2
ret1()
ret2 = ret
ret3 = ret2
ret2()
ret3()
# 执行结果:
# in func1
# in func2
# in func1
# in func1
# 例二:
#
def func1():
print('in func1')
def func2():
print('in func2')
def func3(x, y):
x()
print('in func3')
y()
print(111)
func3(func2, func1)
print(222)
# 执行结果:
# 111
# in func2
# in func3
# in func1
# 222
def func1():
print('in func1')
def func2(x):
print('in func2')
return x
def func3(y):
print('in func3')
return y
ret = func2(func1)
ret()
ret2 = func3(func2)
ret3 = ret2(func1)
ret3()
# 执行结果:
# in func2
# in func1
# in func3
# in func2
# in func1
# 看代码写结果:
# 例四:
#
#*******
def func(arg):
return arg.replace('alex', '****')
def run():
msg = "Alex和大家都是好朋友"
result = func(msg)
print(result)
run()#Alex和大家都是好朋友(alex与Alex不同,不进行替换操作)
data = run()#Alex和大家都是好朋友
print(data)#none
# 看代码写结果:
#
# 例五:
#
data_list = []
def func(arg):
return data_list.insert(0, arg)
data = func('绕不死你')#data =data_list.insert(0, '绕不死你')
print(data)#none,列表中除了pop操作有返回值之外,其他操作都没有返回值,insert函数没有返回值
print(data_list)#['绕不死你']
# 看代码写结果:
# 例六:
#
#
def func():
print('你好呀')
return '好你妹呀'
func_list = [func, func, func]
for item in func_list:
val = item()
print(val)
# 看代码写结果:
# 你好呀
# 好你妹呀
# 你好呀
# 好你妹呀
# 你好呀
# 好你妹呀
print("------")
# 例七:
#
#
def func():
print('你好呀')
return '好你妹呀'
func_list = [func, func, func]
for i in range(len(func_list)):
val = func_list[i]()
print(val)
# 看代码写结果:
# 你好呀
# 好你妹呀
# 你好呀
# 好你妹呀
# 你好呀
# 好你妹呀
#
# 例八:
#
#
def func():
return '大烧饼'
def bar():
return '吃煎饼'
def base(a1, a2):
return a1() + a2()
result = base(func, bar)
print(result)
# 看代码写结果:
#大烧饼吃煎饼
# 例九:
#
#
def func():
for item in range(10):
pass#pass下面的代码会正常执行
print("1111")
return item#return会结束代码,for循环执行一次后,return,结束func()函数
func()#空
# 看代码写结果:
#
# 例十:
#
#
def func():#生成器
for item in range(10):
yield item#yield会把当前的值扔出去,并且记录当前的位置
g=func()
print(next(g))
print(next(g))
print(next(g))
# 看代码写结果:
#
# 0
# 1
# 2
# 例十一:
#***********报错
# item = '老男孩'
# def func():
# item = 'alex'
#
# def inner():#此处inner指向函数体起始空间
# print(item)
#
# for inner in range(10):#此处inner分别依次指向数字空间0,1,2,3,4……,最后inner指向数字9开辟的空间
# pass
#同一块空间内,变量只能只想一个地方,func函数外item指向”老男孩“的是一个空间,func函数内item指向另一个空间
# inner()#数字+()报错
#
#
# func()
# 看代码写结果:
#alex
# 例十二:
#
l1 = []#list可变
def func(args):
l1.append(args)#在函数内的局部空间也能对list进行操作
return l1
print(func(1))
print(func(2))
print(func(3))
# 看代码写结果:
#
# [1]
# [1, 2]
# [1, 2, 3]
# 例十三:
#
name = '宝元'
def func():
global name
name = '男神'
print(name)
func()
print(name)
# 看代码写结果:
# 宝元
# 男神
# 例十四:
#
name = '宝元'
def func():
print(name)
func()
# 看代码写结果:
# 宝元
# 例十五: (选做题)
#
# name = '宝元'
# def func():
# print(name)
# name = 'alex'#报错,词法,语法,语义
# func()
# 看代码写结果:
# 例十六:
#
#
def func():
count = 1
def inner():
nonlocal count
count += 1
print(count)
print(count)
inner()
print(count)
func()
# 看代码写结果:
# 1
# 2
# 2
# 例十七: (选做题)
#**************************
#
def extendList(val, list=[]):#可变数据类型的陷阱,列表,字典,集合同。
# 默认参数在定义的时候已经开辟了一片固定的空间,假设默认参数list=[] 的地址010
list.append(val)
return list
list1 = extendList(10)#010 [10]
list2 = extendList(123, [])#list指向新给的110空间 [123]
list3 = extendList('a')#010 [10,a],由于list1,list3指向同一片010空间,所以010
print('list1=%s' % list1)
print('list2=%s' % list2)
print('list3=%s' % list3)
# 看代码写结果:
# list1=[10, 'a']
# list2=[123]
# list3=[10, 'a']
# 例十八:
#
#
def extendList(val, list=[]):
list.append(val)
return list
print('list1=%s' % extendList(10))
print('list2=%s' % extendList(123, []))
print('list3=%s' % extendList('a'))
# list1=[10]
# list2=[123]
# list3=[10, 'a']