【笔记】python解疑和反思
本帖最后由 隐而远外 于 2020-8-11 18:16 编辑如题所示,今天我要发一些这些天学习python时遇到的问题以及解答它的过程。
## 疑惑来源
学到数据类型之集合时我看到视频里的老师这样来创建一个集合:
```python
b=set()
```
我对中括号很是疑惑,为什么要加中括号?不加会怎样?于是我很皮的在sublime 中写下了如下:
```python
b=set(11,22,'zhangsan')
```
然后运行它,果不其然报错了
```python
b=set(11,22,'zhangsan')
TypeError: set expected at most 1 argument, got3
```
这是为什么?
##解疑过程
我想不出答案,于是直接ctrl+c,ctrl+v进浏览器里搜,终于在CSDN社区找到了和我有类似疑惑的人不过他的疑惑不是set()而是list(),他的问题大概是这样的:
```python
ty=list(1,2,3,4,5,6)
TypeError: list expected at most 1 argument, got6
```
看到这我就激动了,我们两个的问题不就相当于是一样的嘛!然后我看到了他的解答是这样说的:
list()里面至多有一个元素!
这就解释了报错里面为什么反复出现:at most这样的词,然后他的解决办法是这样的:
```python
ty=list((1,2,3,4,5,6))
print(ty)
```
他把list()里面的数据变成了一个元组,这样打印出来就是一个列表!亲测过!
之后我又搜索python,list ()得到了这样一句话:
**list()方法用于将元组转换为列表。**
到此我终于明白了list()的根源用法了!
set()函数可以创建一个无序不重复的元素集,这个函数至多可以传一个参数。
于是我老老实实的按照老师的方法,加上中括号运行,这次当然是可以的~~
那是不是就意味着:**set()方法可以把列表转换为集合?**这有待大家讨论。
## 反思
写到这里大家可能对我说的有些不知所云,没关系,可能你只是没接触过,一旦学习了,相信会比我学的还好。
其是这有些“无心插柳柳成荫”了,写到这里,我又想到了论坛网友的评论了:“那个用list和用“[]”产生的列表好像不一样,”我不知道这里的“不一样”是不是对应了上面的分析,如果是的那就太好了。
今天就到这里了,我今天现学了Markdown 不知道效果如何,第一天用发出来看看哈哈哈
还是那句话“用心讨论,共获提升!”希望大家每天进步!
本帖最后由 隐而远外 于 2020-8-11 13:49 编辑
### 抛出问题
### 分析问题
callable()是python的内置函数,用来检查对象是否可被调用,可被调用是指对象能否使用()括号的方法调用
在如上的代码中,由于变量list和函数list重名了,所以函数在使用list函数时发现list是一个定义好的列表,而列表是不能被调用的,因此出现错误。
### 解决办法:
我们只需要修改变量名list 就可以了。
### 总结
在变量名的命名时一定要注意,应避免和python的关键字,函数名冲突。
创建列表时,尽量不用list=[]这种形式,用a,b,c... 什么的更好。如果非要用,尽量写成list1,list2,list3...
好了,关于list()的讨论就到这里。
### list总结之终极版
#### 创建空list
list1 = [](这里的list1可以换成其它变量,只要不与python的函数名,关键字冲突就行)
list2 = list() (这里的list2也是一样的)
#### 创建并初始化list
list1 = ['a','b','c',123] #比较常用,类型可以不一致
list2 = list(list1) #这里的list传入的是可迭代对象,切记对象只可传一个参数,上面已经讨论过了,可传参数如set,tuple,generator
问题解决了的感觉真好~~
@13832811375 q19348 发表于 2020-8-14 01:39
这段难道不是list作为变量接收一个列表吗?
内置函数不能作为变量名??
现在才回复不好意思啊,不是list不可以做为变量名,而是它容易和函数名list()起冲突,单独创建一个列表可以用list=这种形式,但如果遇到既要创建列表,又要用到list函数时,尽量不要把变量名写成“list=”这种形式容易出现报错,还是不懂的话可以看看这篇帖子的推荐楼,那里面写的还算清楚吧。 哈哈哈好沙雕的感觉{:301_971:}
set()是方法
[]是数据类型 Ldfd 发表于 2020-8-10 21:37
哈哈哈好沙雕的感觉
set()是方法
[]是数据类型
活捉大佬一枚!你是我遇到的第三个有个博客的人,好厉害好厉害,感觉能写博客的都是牛人~~我也感觉自己有点傻哈哈,傻了有十几年了{:1_906:} 隐而远外 发表于 2020-8-10 21:48
活捉大佬一枚!你是我遇到的第三个有个博客的人,好厉害好厉害,感觉能写博客的都是牛人~~我也感觉自己有 ...
纯小白Orz{:301_1004:}
博客现在搞得很无脑的,基本就是照着教程,只要想做一定能搞出来,现成的资源很多 本帖最后由 wuyangteam 于 2020-8-10 22:12 编辑
我的理解是list(l)就相当于带有一个参数的构造函数,所以你可以传字典对象,列表对象,元祖对象,复杂对象列表等等.
源码:
wuyangteam 发表于 2020-8-10 21:57
我的理解是list(l)就相当于带有一个参数的构造函数,所以你可以传字典对象,列表对象,元祖对象,复杂对象列表 ...
对对对,list只能含一个参数是前提,然后这一个参数可以是元组,集合,列表还有你写的那个test,但无论是元组还是集合还是其它的最后都会被list给转化为列表,是这样理解的不? 隐而远外 发表于 2020-8-10 22:12
对对对,list只能含一个参数是前提,然后这一个参数可以是元组,集合,列表还有你写的那个test,但无论是 ...
对的,最终会被转为list,因为list()就是用来构造列表的.
我发现吾爱的这个编辑,好难用哦,{:1_901:} 虽然一直在尝试着学习,但一直学不进去,估计还是没有动力 。努力,加油,给自己打气,向楼主 学习!
学到了学到了。。{:1_921:}
页:
[1]
2