Python初体验(4)-java与python的差异(高级操作)

一.文件

python的文件操作很像C语言,使用内置open函数,要在参数中传递操作模式,

f = open("story.txt",'w')

f.write('从前有座山')

f.close()

f = open("story.txt",'r')

story = f.read()

print (story)

f.close()

二.异常

和java的try cach finally,逻辑一样

try:

    f = open("story.txt",'r')

except ZeroDivisionError as e:

    print('except:', e)

except FileNotFoundError:

    print('except:', '文件没找到')

finally:

    print('finally')

可以在except语句块后面加一个else,当没有错误发生时,会自动执行else语句

三.线程与线程锁

1.如何开启一个新的子线程

写一个函数,类似java的run()

创建一条线程,传入任务

import threading

import time

def download(file):

    n = 0

    while n <= 100:

        print(file,':下载进度',n,"%")

        n = n + 10

        time.sleep(0.5)

t1 = threading.Thread(target = download,args=('游戏',)) 

t2 = threading.Thread(target = download,args=('图片',))  //args参数最后还要加个逗号,以表示数组

t1.start()

t1.join()

t2.start()

start和join函数和java类似。

2.给线程加锁

通过threading.Lock()来实现创建一个锁

lock = threading.Lock()

def fun(a):

    for i inrange(100000):

        lock.acquire()

        #    对原本线程不安全的数据做操作

        lock.release()

四.

之前对比着java学习了python的最基础部分,现在要单独研究一下python中独有的高级特性。例如在与java对比的时候,介绍过,列表、元组、字典、集合,但是他们还有一些独有的特性没有详细介绍。

1.切片

python中有一种对列表的操作方法,叫切片,把一个列表切开,得到的结果还是一个列表。

l = ['aaa','bbb','ccc']

print(l[0:3])    #['aaa', 'bbb', 'ccc']

print(l[:3])    #['aaa', 'bbb', 'ccc'],0可以省略

print(l[-1])    #ccc,倒数第一个元素

print(l[-2:])    #['bbb', 'ccc'],从倒数第二个取到最后一个

print(l[0:3:2])     # ['aaa', 'ccc'],每跳两个取值

切片操作同样适用于tuple和字符串

2.列表生成式与生成器

列表生成式

用一个特殊的语法来创建列表,这样的语法很简短,第一次看的时候很懵逼。

l = [x*2 for x in range(1, 10)]

print(l)

f = [x + y for x in 'ABCDE' for y in '1234567']   #两个集合做笛卡尔积组合

print(f)

h = [x for x in range(1, 30) if (x%3==0)]    

print(h)

列表生成器

虽然名字很像,但是和生成式并不是一样的概念。生成器是一个对象generator,用来代替列表被使用,这个对象接收一个列表生成的规则,然后在使用列表生成器的时候,并不是真的把所有数据存储在生成器中,而是动态计算列表中的元素。好处就是用时间换空间,如果一个列表要存储特别大量的数据,就适合用生成器来代替。

#在写法上看起来和生成式很像,只是把[]换成了()

l = (x*2 for x in range(1, 1000))

#print(l)    # 报错,l是一个生成器,而不是列表。没有办法用这样的方法打印了

#print(l[2])     #报错,生成器不能直接使用索引

for n in l:

    print(n)

yield

用yield来创建一个高级的列表生成器,yield可以把一个函数变成一个列表生成器,通过yield标识的值会成为列表中的一个元素

def fun(t):

    a = 0

    for i in range(t):

       a+=i

       yield a   

a = fun(10)     #a是一个列表生成器

for i in

       print(i)    #  0 1 3 6 10 15 21 28...

3.迭代

enumerate()

python的普通迭代for…in…操作是没有下标的,如果需要下标,要使用一个函数enumerate(),得到一个枚举,索引与值的组合。

l = ['aaa','bbb','ccc']

m = enumerate(l)    #enumerate()函数入参是一个列表,返回值m是枚举类型

for index,value in m:

    print(index,value)

Iterable与Iterator

下面区分两个概念,迭代器Iterator和可迭代对象Iterable。

在java中,Iterable是一个接口,实现这个接口的对象都能被用foreach迭代。

在java中,Iterator是一个接口,实现这个接口的对象都可以用next()操作。

在python中类似,可以用for in 操作的都是可迭代对象Iterable

集合数据类型,如list、tuple、dict、set、字符串,都可以用for来迭代,称为可迭代对象。上面介绍的生成器generator也是可迭代对象。

Iterator对象可以被next()函数调用并不断返回下一个数据。

列表生成器generator,既是Iterable又是Iterator。

了解了这些最基本的东西之后,其他的特性和使用方法就可以在实际开发中学习了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值