zoukankan      html  css  js  c++  java
  • 一道新浪面试题的解析

    python中的一种特殊语法

    li = [x + 100 for x in range(10) if x > 6]
    li1 = [x + 100 for x in range(10)]
    print(li)
    print(li1)
    
    #执行结果:
    
    #[107, 108, 109]
    #[100, 101, 102, 103, 104, 105, 106, 107, 108, 109]
    

      

    新浪的一道面试题

    li = [lambda :x for x in range(10)]
    print(li[0]())

    结果是多少?

    分析: 因为lamda :x 这个函数在进行循环时,并没有执行。而在外层打印此时的x,为9,
    这时把x的值放入内部进行执行,相当于print(lambda : 9),所以答案为9

    上题的本质如下:

    li = []
    for i in range(10):
    	def f1():
    		return i
    	li.append(f1)
    	# li为列表,内部为相同功能的函数
    
    print(li[0]())
    print(li[1]())
    print(li[2]())
    print(li[3]())
    print(li[4]())
    

    执行结果:
    9
    9
    9
    9
    9

    注意去理解

    此时修改一下上题中的参数,看看新的结果是什么

    li = []
    for i in range(10):
    	def f1(x=i):  # 原来没有参数,此时加上参数
    		return i
    	li.append(f1)
    
    print(li[0]())
    print(li[1]())
    print(li[2]())
    print(li[3]())
    

    执行结果如下:

    9
    9
    9
    9
    9

    注意去理解

    此时如果再次对上题中的参数进行更改,看看结果有会如何变化

    li = []
    for i in range(10):
    	def f1(x=i):
    		return x   # 此时只把上例中的返回值给改为x
    	li.append(f1)
    
    print(li[0]())
    print(li[1]())
    print(li[2]())
    print(li[3]())
    

    执行结果:
    0
    1
    2
    3
    4

    注意理解,本质上就是看其执行了还是没执行。

  • 相关阅读:
    原根
    FFT
    bzoj3991[SDOI2015]寻宝游戏
    bzoj3990[SDOI2015]排序
    序列自动机
    bzoj4032[HEOI2015]最短不公共子串
    2015.8.28 字符串
    bzoj2821作诗
    bzoj2741【FOTILE模拟赛】L
    一个牛人给java初学者的建议
  • 原文地址:https://www.cnblogs.com/yang-ning/p/6425787.html
Copyright © 2011-2022 走看看