zoukankan      html  css  js  c++  java
  • 面试题

    def extendList(val, list=[]):
        list.append(val)
        return list
    
    list1 = extendList(10)
    print(list1)  #[10]
    list2 = extendList(123, [])
    print(list2)  #[123]
    list3 = extendList('a')
    print(list3)  #[10,a]
    
    
    '''
    a =  5
    a =  6
    print(a)
    lst = []
    lst.append(1)
    print(lst)
    lst.append(2)
    print(lst)
    lst = []
    lst.append(1)
    print(lst)
    '''
    
    """
    函数如果定义一个默认形参,那么这个值会在内存当中提前保留一份
    在函数调用时,如果用户定义了实参,那么使用用户自己的实际值
    	         如果用户没有给与实际参数,那么使用默认形参值
    print("<===>")
    def func(a = 5):
    	print(a)
    func() # a = 5
    func(6)
    
    def func(val, list=[]):
        list.append(val)
        print( list)
    func(1)
    func(2,[5,6,7])
    func(3)
    
    """
    
    # ###3.res多少?
    def func():
    	return [lambda x : i*x for i in range(4)]
    
    res = [m(2) for m in func()]
    print(res)
    
    '''
    在ceshi函数当中 跑循环4遍 ,循环定义4个函数
    注意的是,遍历的时候仅仅是定义,只有在调用的时,才会运行函数体,
    所以定义时,i变量不会直接走入函数体内参与运算
    
    最后通过lst返回,lst当中包含4个函数,因为内函数func使用了外函数ceshi的变量i,
    所以变量i延长了它的生命周期,这是闭包的特点
    
    返回出来之后,通过列表推导式 , 循环调用了4次函数,这个时候 2 与先前的i 参与运算,
    因为i值已经全部循环结束,最后的i = 3,所以每个函数的运算结果 都是 2*i => 2 * 3 =>6
    因为循环4次,所以列表里 产生了4 个 6;
    '''
    
    def ceshi():
    	lst = []
    	for i in range(4):
    		def func(x):
    			return i*x		
    		lst.append(func)
    	return lst
    
    
    lst = ceshi()
    print(lst)
    res = len(lst) #4
    '''
    #
    [
    <function ceshi.<locals>.func at 0x000001805BB50EA0>, 
    <function ceshi.<locals>.func at 0x000001805BB50F28>, 
    <function ceshi.<locals>.func at 0x000001805BB50E18>, 
    <function ceshi.<locals>.func at 0x000001805BB85048>
    ]
    lst = [函数1,函数2,函数3,函数4]
    '''
    for  m in lst:
    	'''
    	def func(x):
    		return i*x	
    	'''
    	res = m(2)
    	print(res)
    '''
    函数的定义处和函数的调用处要分开
    只有在函数调用的时候,才会执行函数体,
    定义的时候只是单纯的定义包括参数,而没有去调用里面的内容
    '''
    
    for i in range(4):
    	pass
    print(i)
    
    
    
    # ###4.打印多少?
    def add(a,b):                     #普通求和函数
        return a + b
    def test():                       #生成器函数
        for i in range(4):
            yield i
    		
    
    # 初始化生成器函数 返回生成器
    g=test()
    for n in [2,10]:
        g=(add(n,i) for i in g)
    print(list(g))
    
    """
    定义一个生成器可以使用两种方式 要么使用生成器表达式,要么使用生成器函数,
    注意只有调用时,才能执行生成器里面的内容 , next,for,list都是在调用生成器
    而g=(add(n,i) for i in g) 写法是在定义生成器
    next(g) for .. in g  list(g) 是在调用
    
    
    在循环时候,只是定义了生成器2次,没有在调用,下次再拿取n的时,n已经等于10
    
    第一次调用生成器
    先计算g=(add(n,i) for i in (0,1,2,3)) 得到结果得范围 g = (10,11,12,13)
    第二次调用生成器
    先计算g=(add(n,i) for i in (10,11,12,13)) 得到结果得范围 g = (20,21,22,23)
    list进行强转,得到列表[20,21,22,23]
    """
    
    
    
    '''
    g=(add(n,i) for i in g)  # i的范围 0 1 2 3
    add(n,0) => add(10,0) => 10
    add(n,1) => add(10,1) => 11
    add(n,2) => add(10,2) => 12
    add(n,3) => add(10,3) => 13
    g = (10,11,12,13)
    
    g=(add(n,i) for i in g)
    add(n,10) => add(10,10) => 20
    add(n,11) => add(10,11) => 21
    add(n,12) => add(10,12) => 22
    add(n,13) => add(10,13) => 23
    [20,21,22,23]
    '''
    
    for n in [2,10]:
    	pass
    print(n)
    

      

  • 相关阅读:
    熟悉中的应用与调整
    跨域
    Office办公软件操作技巧 office快捷键大全
    ROS入门介绍
    ROS开发指令
    ROS中msg和srv文件的区别
    package.xml使用说明
    Python的内置数据结构
    Python异常处理
    工作后的第二个任务(项目)
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/10920450.html
Copyright © 2011-2022 走看看