记录一下python学习中的问题

开一篇记录学习python中遇到的问题(长期更)

1、关于print输出:
由于博主长期接触C,所以用python输出习惯性的用%形式。用回python正常输出模式发现了一些问题,对比以下两种输出:

print("UltraGaya is ","me")
print("UltraGaya is %s" % "me")

憨憨博主本以为这两种输出是一样的,结果:

UltraGaya is  me
UltraGaya is me

!!!第一行多了一个空格!!查阅资料才发现print输出中逗号是占用一个空格的…之前出现过的格式错误全都是这个逗号整出来的,囧!

2、join函数:
“xxx”.join(str),表示以xxx为分隔符将str字符串进行连接并不是直接连接,其中join()中也可以放入条件语句进行筛选

3、输入多行数据判断结束:

import sys
while True:
	line = sys.stdin.readline()
	if not line:
		break
	"输入处理代码块"
或者:
while True:
	line=input()
	if line=='END':
		break
	"代码块"

4、reverse()和reversed()区别:
(1)、reverse()是列表独有的一个方法,别的容器用了报错;reversed()对所有迭代器都可以用
(2)、reverse()是原地逆置,不返回任何东西,如果print输出的是None;而reversed()则返回一个新的迭代器,可以用next()等迭代器的方法访问,也可以在外面加上list()等方法,调用函数的迭代器本身不发生任何变化

5、读入单个字符:
(1)、sys.stdin.read(1)
(2)、readchar.readchar() //这种方法我在win10下用不了,直接黑屏然后跳出

6、关于python中sort函数里自定义比较方法的实现:
貌似python3里不支持往sort里传入比较函数了,只能通过cmp_to_key()间接转化,头文件:

from functools import cmp_to_key
XX.sort(key=cmp_to_key(cmp))

7、位置参数和关键字参数混合:
如果同时出现两种参数形式,首先应该写的是位置参数,然后是关键字参数

8、数量可变参数:
当函数参数数目不确定的时候,星号将多出来的参数整合成元组赋给*X,双星号将多出来的参数整合成字典赋给**X

9、集合中的运算:
len(),min(),max(),sum(),clear()等是常规运算
add(),remove()是集合特有运算
add(x):向集合中添加元素x,无论集合里有没有该元素都返回None!
remove(x):从集合中删除元素x,若不存在x则抛出KeyError错误,否则依然返回None
所以列表去重且按序输出可以这么写:

newl=[i for i in l if i not in s and not s.add(i)]

10、碰到递归问题例如斐波那契数列能优化尽量优化,否则容易爆栈(这点跟C/C++没得比)

11、isinstance()和type()函数对比:
type()不认为子类是父类的一种类型,不考虑继承关系,而isinstance()子类是父类的一种类型,考虑继承关系。
所以判断两个类型是否相同一般用isinstance()
isinstance()用法——isinstance(object,classinfo):
object——实例对象
classinfo——可以是直接或间接的类名、基本类型或者其组成的元组

12、map函数(python中超好用的映射函数):
map函数根据提供的函数对指定序列映射
语法:map(function,iterable)
function:即将进行的操作
iterable:作用的对象
返回迭代器或者在map外层再套上别的容器生成新的迭代器,例如:list(map(int,input().split()))

13、zip函数(字典键值对互换经常用到):
用于将可迭代的对象中对应的元素打包成一个个元组,然后返回这些元组组成的列表或迭代器
语法:zip([iterable,…])
参数为两个或多个序列
若各个迭代器的元素个数不一致,则返回的列表长度与最短的对象相同

14、eval()函数:
eval()函数将输入的字符串去掉引号后进行运算解析,若不是可运算内容则查找有无该变量(可以是容器)。如果没有找到则返回NameError
对于将输入字符串数据转换成字典集合等效果绝佳

15、读取文件时记得处理最后的换行符

16、排序时如果要求对一个关键字正序另一个关键字逆序则可以将其中一个转换为负数统一成一种顺序即可

17、Python类中的私有变量定义时前面要加双下划线,像是__XXX这种,这样外部就无法访问。但是若一定要强行访问并修改也是可以的,这就要在变量名前面加上_类名,即_类名__XXX。总之,Python中没有任何手段或方法阻止你干坏事,一切全都靠自觉(引用某大佬的话)

18、json语法(不单单是python,所有语言都有json格式):
将python对象转换成json字符串,主要两个方法——dump和load
dump(obj,file)——将目标对象转换成字符串写入file文件中
load(file)——将file文件中的内容以字符串形式导入

19、在用到requests库爬取网页时会报HTTPSConnectionPool: Max retries exceeded with url的错误
查了一下大概是请求过于频繁,于是网上试过各种办法像是keep_alive改成false还有设置默认retries数目,关闭代理等还是无法解决,先留个坑,以后搞这块内容的时候再来解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值