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

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

  • 相关阅读:
    回归,随缘写一些python心得吧
    划分树【有些东西,其实自己还不太会也要忍住把*装完】
    [codevs3273]两圆的交 计算几何
    10-12考试整理
    10-7考试整理
    [codevs1163]访问艺术馆
    [codevs2640]打印页数
    9-28 解题报告
    [CODEVS3323]时空跳跃者的封锁
    [codevs2442] kshort 经典题
  • 原文地址:https://www.cnblogs.com/yang-ning/p/6425787.html
Copyright © 2011-2022 走看看