隐而远外 发表于 2020-8-10 21:14

【笔记】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 10:59

本帖最后由 隐而远外 于 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

隐而远外 发表于 2020-8-16 15:07

q19348 发表于 2020-8-14 01:39
这段难道不是list作为变量接收一个列表吗?
内置函数不能作为变量名??

现在才回复不好意思啊,不是list不可以做为变量名,而是它容易和函数名list()起冲突,单独创建一个列表可以用list=这种形式,但如果遇到既要创建列表,又要用到list函数时,尽量不要把变量名写成“list=”这种形式容易出现报错,还是不懂的话可以看看这篇帖子的推荐楼,那里面写的还算清楚吧。

Ldfd 发表于 2020-8-10 21:37

哈哈哈好沙雕的感觉{:301_971:}
set()是方法
[]是数据类型

隐而远外 发表于 2020-8-10 21:48

Ldfd 发表于 2020-8-10 21:37
哈哈哈好沙雕的感觉
set()是方法
[]是数据类型

活捉大佬一枚!你是我遇到的第三个有个博客的人,好厉害好厉害,感觉能写博客的都是牛人~~我也感觉自己有点傻哈哈,傻了有十几年了{:1_906:}

Ldfd 发表于 2020-8-10 21:49

隐而远外 发表于 2020-8-10 21:48
活捉大佬一枚!你是我遇到的第三个有个博客的人,好厉害好厉害,感觉能写博客的都是牛人~~我也感觉自己有 ...

纯小白Orz{:301_1004:}
博客现在搞得很无脑的,基本就是照着教程,只要想做一定能搞出来,现成的资源很多

wuyangteam 发表于 2020-8-10 21:57

本帖最后由 wuyangteam 于 2020-8-10 22:12 编辑

我的理解是list(l)就相当于带有一个参数的构造函数,所以你可以传字典对象,列表对象,元祖对象,复杂对象列表等等.


源码:

隐而远外 发表于 2020-8-10 22:12

wuyangteam 发表于 2020-8-10 21:57
我的理解是list(l)就相当于带有一个参数的构造函数,所以你可以传字典对象,列表对象,元祖对象,复杂对象列表 ...

对对对,list只能含一个参数是前提,然后这一个参数可以是元组,集合,列表还有你写的那个test,但无论是元组还是集合还是其它的最后都会被list给转化为列表,是这样理解的不?

wuyangteam 发表于 2020-8-10 22:16

隐而远外 发表于 2020-8-10 22:12
对对对,list只能含一个参数是前提,然后这一个参数可以是元组,集合,列表还有你写的那个test,但无论是 ...

对的,最终会被转为list,因为list()就是用来构造列表的.
我发现吾爱的这个编辑,好难用哦,{:1_901:}

sky1209 发表于 2020-8-11 00:37

虽然一直在尝试着学习,但一直学不进去,估计还是没有动力 。努力,加油,给自己打气,向楼主 学习!

aa吴所谓 发表于 2020-8-11 06:31

学到了学到了。。{:1_921:}
页: [1] 2
查看完整版本: 【笔记】python解疑和反思