小甲鱼第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

时间: 2024-10-25 07:25:12

小甲鱼第52讲:像极客一样去思考的相关文章

小甲鱼零基础入门PYTHON

 000.愉快的开始 00:17:37 ☆  001.我和Python的第一次亲密接触 00:13:26 ★  002.用Python设计第一个游戏 00:24:00 ★  003.小插曲之变量和字符串 00:19:04 ★  004.改进我们的小游戏 00:26:31 ★  005.闲聊之Python的数据类型 00:18:41 ★  006.Pyhon之常用操作符 00:16:31    007.了不起的分支和循环 00:16:30    008.了不起的分支和循环2 00:12:09  

Python3零基础入门学习视频+源码+课件+习题-小甲鱼

目录 1. 介绍 2. 目录 3. 下载地址 1. 介绍 适用人群 完全零基础入门,不需要任何前置知识. 课程概述 本系列教程面向零基础的同学,是一个深入浅出,通俗易懂的Python3视频教程. 前半部分主要讲解Python3的语法特性,后半部分着重讲解Python3在爬虫.Tkinter.Pygame游戏开发等实例上的应用.整个系列共16个章节,前边13个章节从一个小游戏引入Python,逐步介绍Python的语法以及语言特色.最后3个章节为案例的演示,是前边内容的总结和提高. 其他介绍 2.

小甲鱼python视频第四讲(笔记及课后习题答案)

今天主要学习的是关于第二讲中那个猜数字游戏的改进,在课程中主要学到了以下知识点: 1:python的比较操作符 2:if和else语句的使用 3:while循环 4:and的使用 5:简单的模块引用(本课程为random的引用) 1,关于python的比较操作符,有如下几种: 1 python比较操作符 2 3 > 左边大于右边 4 >= 左边大于等于右边 5 < 左边小于右边 6 <= 左边小于等于右边 7 = 左边等于右边 8 != 左边不等于右边 注意:所使用的符号均为英文输

Ubuntu linux下部署golang配置环境,极客学院 无闻讲的安装配置是错的,折腾我好几遍,真是有点坑

开始按极客学院无闻讲的做,弄了几遍都不行,最后发现是错的,别人告诉我这是mac下的virtualbox是这样的,不管怎样,被坑的不浅. 虽然sudo apt install golang-go 就能安装,但是不是最新版本.安装最新版本的正确步骤如下: 一.需要文件 golang:http://www.golangtc.com/download 二.安装golang 一)从上文给出的链接中选择所需要的版本的golang包(选linux-amd64.tar.gz版本,本人是64位系统,我安装时最新版

第九届极客大挑战——小帅的广告(二阶sql注入)

引言:因为太想加入三叶草了,所以极客大挑战这段时间一直在努力的学习,原来还真没想到能在比赛中拿到排行榜第一的成绩,不过现在看来努力始终都是有回报的.但我依然还是比较菜啊-.-,最近却有很多伙伴加我好友,一来就叫我大佬,让我深感有愧-.-,既然都想看我wp,那我就挑几道题写写好了,口拙词劣还望见谅. 也是经过一通扫描和测试,没发现其他有用信息,感觉这是个sql注入.其实对于二阶sql注入我以前没实践过,也没看过资料,只是知道这个名字,但不知道为何看到这道题就让我回想起了这个名词,所以查了一下二阶s

小甲鱼python视频第九讲(课后笔)

1.列表里可以存放什么东西? 可以存放任何的数据类型, list1 = ['我爱你','i love you',1314] print(list1) 2.向列表中添加元素 append(将参数作为一个元素添加到列表的结尾) list1 = ['我爱你','i love you',1314] print(list1) list1.append(['forever','just you']) print(list1) extend  (将参数作为一个列表添加到列表的结尾) list1 = ['我爱你

小甲鱼python视频第四讲(课后习题)

1while语句中,当条件为真时,它会一直循环下去,比如下面的例子,不过可以用Ctral + C来强制结束 while 'C': print("i love you") 2.观察打印次数 i = 10 while i > 0: print("i love you") i = i - 1 3.注意and的用法(表示两边都为真) 10 < a < 19 10 < a and a < 19 4.短路逻辑 笼统的说,短路逻辑值得是在一个逻辑中,

小甲鱼python视频第六讲(笔记及课后习题答案)

今天主要学习了常用操作符,如算术操作符.比较操作符.逻辑操作符等,鉴于课件做的太好(赞美小甲鱼~~~).我直接把图贴上来(其实是自己懒) 名词解释 拼接 这是第一节学的一个名词,由于自己偷懒,没有写,这里补充上.拼接,其实就是把两个字符串连接在一起,不是其他,注意下面例子的不同 最后着重强调下版本的问题,附带今天的程序(要在版本三中运行) temp = str(input('请输入一个年份:')) while not temp.isdigit(): temp = input("抱歉,您的输入有误

极客编程小挑战#28:实现二级菜单的炫酷显示效果

那么本期挑战的内容是什么?容我卖个关子- 极客标签是一个学习前端知识和分享前端知识的平台.以往的挑战形式,更加偏向于学生完成老师布置的作业.而本期挑战,希望参赛者换个身份参与进来,将自己学习的知识讲授给他人.通过课程的形式,完成任务,并讲解详细,以帮助前端初学者更好地学习为目的,完成此次挑战.   本期挑战: 实现 单击按钮“分享更多”后,下级菜单呈现炫酷显示效果,下级菜单内容如下图(极客标签每篇文章后的分享方式),效果越炫越好- 本次挑战的作品在课程库中添加,以讲解详细.课程效果好为目的.课程