Python杂项

 

【不定期更新Python学习过程中遇到的奇奇怪怪小问题 / tips】

1 同时从控制台(键盘)输入多个变量值:

a,b,c = raw_input('请输入a b c的值,以空格分隔:\n').split( )
print 'a,b,c分别为:',a,b,c
>>>请输入a b c的值,以空格分隔:
>>>11 22 33  #从键盘输入,最后按回车

>>>a,b,c分别为:11 22 33

2 得到逆序字符串(翻转字符串):print  word[ : : -1]

3 优先级:not > and > or 

所以 True or False and False 结果是True !

4 python2.7中,

-12 / 10 = -2
-12 % 10 = 8

而在C++中,

-12 / 10 = -1
-12 % 10 = -2

amazing and WHY ??

5 在空列表上使用for循环,循环体不会被执行

l = []
for x in l:
    print 'this will never be printed.'

6 list的方法,比如.append() .extend() .sort()都是没有返回值的(返回None)。所以不能直接print,

会得到None。

l = ['a','b','c']
print l.append('d')
>> 
None

正确方法如下:

l = ['a','b','c']
l.append('d')
print l
>> 
['a','b','c','d']

7 关于map函数:

1)

print map(int,'1234')
>>[1,2,3,4]
print int('1234')
>>1234

WHY?

2)map函数在python2.7和3.6中的一点不同:3.6版本需要加上 list( ) 函数

'''Py 3.6'''
def fun(s):
    return s.capitalize()

names = ['james','SAM','doBBi']
b = list(map(fun,names)) 
print(b)
>>['James','Sam','Dobbi']
'''Py2.7,直接写'''
b = map(fun,names)

8 关于递归函数是否会有返回值:

第一种情况,当n不为0时,执行digui(n)函数,是没有返回值的(虽然递归过程中调用了digui(0) )

第二种情况下,在递归调用digui(n-1)的前面多加了return,则n>0的时候,执行digui(n)也是有返回值(‘这是返回值’)的

9 写一个函数,接受另一个函数对象作为形参:(要注意的是形参“f”在函数call_fun里的表达方式,有无括号等)

10 字符串方法strip():

可见,word.strip('123')方法,将删除原字符串左右两端全部的‘1’,‘2’和‘3’字符,而不是只删除‘123’样式的子串。

11 在空列表上使用for循环,则循环体从不会被执行:

for i in []:
    print 'This will not be printed.'

不过,这种情况会被执行喔:

for i in [[]]:
    print 'This will happen !'

12 复制list a,对复制后的list b进行操作,同时不改变原list a中的元素:

方法1:

import copy
a = [1,2,3,4]
b = copy.deepcopy(a)

方法2:

a = [0,1,2,3]
b = a[:]
'''这之后,对列表b进行更改,并不改变原列表a 【注意那个“:”号!】'''

【这两种方法有什么不同,各自优劣,尚不清楚】

tip:下述做法,b 与 a将指向同一个列表地址,更改b即是更改a

a = [0,1,2,3]
b = a

13 不同的写方法得到不一样的结果!!

a = [1,2,3,4,5]
b = [1,2,3,4,5]
c = [1,2,3,4,5]
b[3:] = ['x'*4] #写法1
c[3:] = ['x']*4 #写法2
print 'a:',a
print 'b:',b
print 'c:',c
>>>
a: [1, 2, 3, 4, 5]
b: [1, 2, 3, 'xxxx']              #结果1
c: [1, 2, 3, 'x', 'x', 'x', 'x']  #结果2

14 得到倒序range列表:(注意listB从5开始,而listA不包括5)

'''Python 3.6'''
listA = list(range(5))
>>[0,1,2,3,4]

listB = list(range(5,-1,-1))
>>[5,4,3,2,1,0]

15 把整数的各位存到列表:

integer = 1234
b = map(int,str(integer))
print b
>>
[1,2,3,4]

把整数各位作为字符存到列表:

integer = 1234
l = list(str(integer))
print l
>>
['1', '2', '3', '4']

16 a is b ?

a = 'school'
b = 'school'
a is b
>>True  #a和b都指向同一个对象
a = [1,2,3]
b = [1,2,3] #或者 b =a[:]
a is b
>>False

出现这种区别是因为:字符串是“不可变”的,而列表是“可变”的。

tip:a is ba == b 是不同的含义

17 return还能这样写...

'''输出两个数中较大的数'''
def big(a,b):
    return a if a>b else b

18 Python 中,让数字和字符比较大小,是会输出结果的(虽然逻辑上没有道理),比如

100 < 'a'
>> True

19 尽量不要使用如下方式创建列表:

t = [[0]*3]*4 #创建一个“4*3”的值为零的二维向量

会由于浅拷贝的原因导致一系列问题

20 如果列表有序,使用二分查找比 word in list 方法快很多

21 两个for i in range(n)循环嵌套,不会互相影响 i 的取值

t = ['a','b','c']
for i in range(4):
    print(i)
    for i in t:
        print('in',i)
>>
0
in a
in b
in c
1
in a
in b
in c
2
in a
in b
in c

22 在需要作为模块被导入的.py文件内写:

if __name__ == '__main__':

    ans = function(xxx)
    ....

则if内包含的语句不会被执行(避免运行时显示出不需要的内容)

23 编写函数时,如果在某处需要程序抛出异常,则写语句:

raise ValueError

raise 语句也接收一个可选的参数用来详细描述错误:

raise ValueError, 'Oh there is an xxx error'

24  字典的“(key)”必须是“不可变类型”的数据,例如str , int, tuple 等类型;

      而字典的“(value)”可以是可变类型,如列表list,甚至是字典dict

字典是通过散列表(哈希表,hashtable)的方式实现的,所以其“键”必须是可散列的(hashable)。

散列是一个函数,接收(任意类型)的值并返回一个整数。字典使用这些被称为散列值的整数来保存和查找键值对。

                                                                                                                                                      ——《Think Python》

25 关于函数内是否可以更改外部的全局变量:(情况较复杂,暂时还没完全搞清。不过,以后在需要修改全局变量的时候,在函数内部尽量写上一句“global xxx”,则在函数内部对xxx的修改就一定是修改的全局变量xxx了)

参考:stackoverflow回答

26 python3中,input()函数默认输入的是字符串类型哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值