• 小甲鱼第52讲:像极客一样去思考


    以下代码打印什么内容?
    0.
    [code]>>> def func():
    pass

    >>> print(type(func()))[/code]
    当然是打印函数的类型,由于什么都没有返回,也就是”NoneType“
    1.
    [code]>>> print(type(1J))[/code]
    排除法,没有u开题,所以不是”unicode“,不是整型,也不是字符串,那就是”混合型“
    2.
    [code]>>> print(type(lambda:None))[/code]
    起初我以为是NoneType,结果发现是function,结果help(lambda)发现这么一句话:
    the expression ``lambda arguments: expression`` yields a function object.
    也就是无论lambda如何定义,返回的都是一个函数对象
    3.
    [code]>>> a = [1, 2, 3, "FishC", ('a', 'b', 'c'), [], None]
    >>> print(len(a))[/code]
    列表a的长度就是数最外面的逗号分隔的东西有几个,数数大学有7个,分别是3个整型数字、字符串一个、元祖一个、空列表一个加上空值一个。
    4.
    [code]class A:
    def __init__(self, x):
    x = x + 1
    self.v1 = x

    class B(A):
    def __init__(self, x):
    x = x + 1
    self.v2 = x

    >>> b = B(8)
    >>> print("%d %d" % b.v1, b.v2)[/code]
    首先,小甲鱼没有注意缩进问题,在类A的初始化函数那里(如果我没有理解错误的话)。
    如果是这样的话,那么b作为类B的实例对象,应该与A无关呀,不然,怎么来的leiA的属性v1?应该抛出异常吧?而且还有一个语法错误在print语句那里,应该是%(b.v1, b.v2)不然就是只打印前者的意思了,除非py3改了语法,因为我用的是py2哈。

    5.
    [code]class A:
    def __init__(self, x):
    self.x = x
    x = 666

    >>> a = A()
    >>> a = A(888)
    >>> a.x[/code]
    首先,A类在定义的时候是需要传入参数x的,所以,a=A()会报错,而且定义的时候x=666这个常数十无意义的,因为x只是参数,只有当调用A的时候,传入的参数会覆盖x,所以666这个常数的赋值时无意义的,结果只会是888.
    6.
    [code]values = [1, 1, 2, 3, 5]
    nums = set(values)

    def check(num):
    if num in nums:
    return True
    else:
    return False

    for i in filter(checkit, values):
    print(i, end=' ')[/code]
    好吧,小甲鱼累了,里面的代码已经错别字的惨不忍睹,小甲鱼真的是千年的劳模,在此容许在下烧一炷香,实际上肯定是打印1 1 2 3 5,首先,set是一个集合,里面一般是列表这样的可迭代对象;其次,filter(function or None, sequence)这个函数返回”function“为真的序列。这里就是返回所有的values列表中的元素,其中元素之间以空格隔开。
    7.
    [code]values = [1, 1, 2, 3, 5]
    def transform(num):
    return num ** 2

    for i in map(transform, values):
    print(i, end=' ')[/code]
    map函数用于讲参数列表”values“里面的每一个元素作为参数”transform“函数的参数最终返回一个列表,因此返回1 1 4 9 25
    8.
    [code]class A:
    def __init__(self, x):
    self.x = x

    a = A(100)
    a.__dict__['y'] = 50
    print(a.y + len(a.__dict__))[/code]
    首先,__dict__用于定义类属性以及对于的值,类属性以及对应的值在类内通过字典方式存储,因此a.y为50,而一共有两个属性,分别是y和x;因此结果为52.
    9.
    [code]class A:
    def __init__(self):
    pass
    def get(self):
    print(__name__)

    >>> a = A()
    >>> a.get()[/code]
    执行的是函数本身,因此打印__main__,当模块被调用的时候,__name__==模块名称
    10.
    [code]country_counter = {}

    def addone(country):
    if country in country_counter:
    country_counter[country] += 1
    else:
    country_counter[country] = 1

    addone('China')
    addone('Japan')
    addone('China')
    addone("American")

    print(len(country_counter))[/code]
    打印字典的长度3,首先字典的键值对分别是addone函数的参数和参数出现的次数,因此长度就是3个不同的国家。
    11.
    [code]dict1 = {}
    dict1[1] = 1
    dict1['1'] = 2
    dict1[1.0] = 3

    result = 0
    for each in dict1:
    result += dict1[each]

    print(result)[/code]
    由于字段中的元素重复键的赋值会被覆盖,因此1会被重新复制为3,结果是result=3+2=5
    12.
    [code]def dostuff(param1, *param2):
    print type(param2)

    dostuff('apples', 'bananas', 'cherry', 'dates')[/code]
    dostuff里面有两个参数,一个是param1='apples',另外一个带*的参数是一个序列类型的参数,*params2=('bananas', 'cherry', 'dates'),因此是第二个参数是一个元组类型。
    13.
    [code]class A:
    def __init__(self, a, b, c):
    self.x = a + b + c

    a = A(1,2,3)
    b = getattr(a, 'x')
    setattr(a, 'x', b+1)
    print a.x[/code]
    首先,getattr实际上返回的是实例对象属性x的值b=1+2+3=6,setattr是重新定义实例对象的属性x的值为7,因此结果为7.
    14.
    [code]list1 = [1, 2]
    list2 = [3, 4]

    dict1 = {'1':list1, '2':list2}
    dict2 = dict1.copy()

    dict1['1'][0] = 5

    result = dict1['1'][0] + dict2['1'][0]
    print(result)[/code]
    结果为5+5=10,实际上copy()函数只是将索引指向了dict1而已,dict1变了,那么dict2也会跟着变,是一种浅拷贝方式,没有断根的拷贝。与传统意义上的克隆不同,要知道克隆出来的可是单独的个体。
    15.
    [code]import copy

    list1 = [1, 2]
    list2 = [3, 4]

    dict1 = {'1':list1, '2':list2}
    dict2 = copy.deepcopy(dict1)

    dict1['1'][0] = 5

    result = dict1['1'][0] + dict2['1'][0]
    print(result)[/code]
    调用copy模块的deepcopy()函数才能达到传统意义上的克隆,结果是result=5+1=6

  • 相关阅读:
    nodeJS操作mongoDB常用api
    git命令
    Scala笔记(1)——基本知识
    Akka Java 中文文档
    训练:用gfsh执行常见的任务
    https://confluence.jnj.com/display/AAIM/Enterprise+Agile+Data+Services
    gfsh操作
    java知识
    maven使用之烦人的.lastUpdated文件
    idea相关操作
  • 原文地址:https://www.cnblogs.com/wing1995/p/4969360.html
Copyright © 2020-2023  润新知