• [技术干货] python json数据与字典数据转换
    python中JSON字符串与字典数据的互相转换:一. json 转换为字典1. 使用json模块的loads函数,该函数通过参数传入json字符串,然后返回与该字符串对应的字典。2. 使用eval函数将json格式字符串当做普通的Python代码执行,eval函数会直接返回与json格式字符串对应的字典。二.字典转换为json1.使用json模块的dumps函数,该函数通过参数传入字典,然后返回与改字典对应的json格式字符串。首先会将名为data的字典转换为字符串,然后将json字符串s通过eval函数转换为字典最后从products.json文件中读取json字符串,并使用loads函数和eval函数两种方法将json字符串转换为字典。vi demo.py#练习从字典转换为jsonimport jsondata = {        'name':'Bill',    'company':'Microsoft',    'age':34    }# 将字典转换为json字符串jsonstr = json.dumps(data)print(type(jsonstr))print(jsonstr)运行结果:<class 'str'>{"name": "Bill", "company": "Microsoft", "age": 34}# 将json字符串转换为字典data = json.loads(jsonstr)print(type(data))print(data)运行结果:<class 'dict'>{'name': 'Bill', 'company': 'Microsoft', 'age': 34}# 定义一个json字符串,使用eval函数将json字符串转换为字典s = '''{    'name':'Bill',    'company':'Microsoft',    'age':20}'''data = eval(s)print(type(data))print(data)print(data['company'])运行结果:<class 'dict'>{'name': 'Bill', 'company': 'Microsoft', 'age': 20}Microsoft#读一个json格式文件,将json数据用两种方法转换为字典列表f = open('p.json','r',encoding='utf-8')jsonStr = f.read()json1 = eval(jsonStr)json2 = json.loads(jsonStr)print(json1)print(type(json1))print(json2)print(type(json2))print(json2[1]['name'])运行结果:[{'name': 'iPhone13', 'price': 9999.9, 'count': 2000}, {'name': '吉利', 'price': 1000000, 'count': 123}]<class 'list'>[{'name': 'iPhone13', 'price': 9999.9, 'count': 2000}, {'name': '吉利', 'price': 1000000, 'count': 123}]<class 'list'>吉利user@cyyxzuk0hs7mxjv-machine:~/ghj-1635423305223$ 
  • [技术干货] python将xml文件转换为字典
    python将xml文件转换为字典使用xmltodict模块。vi demo.pyimport xmltodictf = open('files/products.xml','rt',encoding='utf-8')xml = f.read()d = xmltodict.parse(xml)#print(d)for v in d['root']['products']['product']:    print('uuid',':',v['@uuid'])    print('id',':',v['id'])    print('name',':',v['name'])    print('price',':',v['price'])    print('---------')print(d['root']['products']['product'][0]['@uuid'])import pprint    #引入pprint模块可读格式化输出字典数据pp = pprint.PrettyPrinter(indent=4)pp.pprint(d)使用cloudIDE运行demo.py:user@u4ft68gtp8ygqp8-machine:~/sdfsadf-1635320736190$ /usr/bin/python /home/user/sdfsadf-1635320736190/demo.pyuuid : 1234id : 10000name : iPhone9price : 9999---------uuid : 4321id : 20000name : 特斯拉price : 1000000---------uuid : 5678id : 30000name : Mac Proprice : 40000---------1234OrderedDict([   (   'root',                    OrderedDict([   (   'products',                                        OrderedDict([   (   'product',                                                            [   OrderedDict([   (   '@uuid',                                                                                    '1234'),                                                                                (   'id',                                                                                    '10000'),                                                                                (   'name',                                                                                    'iPhone9'),                                                                                (   'price',                                                                                    '9999')]),                                                                OrderedDict([   (   '@uuid',                                                                                    '4321'),                                                                                (   'id',                                                                                    '20000'),                                                                                (   'name',                                                                                    '特斯拉'),                                                                                (   'price',                                                                                    '1000000')]),                                                                OrderedDict([   (   '@uuid',                                                                                    '5678'),                                                                                (   'id',                                                                                    '30000'),                                                                                (   'name',                                                                                    'Mac '                                                                                    'Pro'),                                                                                (   'price',                                                                                    '40000')])])]))]))])user@u4ft68gtp8ygqp8-machine:~/sdfsadf-1635320736190$ 
  • [技术干货] python将字典转换为xml
    python将字典数据转换为XML字符串;用到dicttoxml模块,需要安装后使用。dict -> xml字符串,格式化xml字符串,然后写入到persons.xml文件当中。vi demo.pyimport dicttoxmlfrom xml.dom.minidom import parseStringimport os# 定义一个字典数组d = [20,'names',{'name':'Bill','age':30,'salary':2000},                {'name':'李宁','age':123,'salary':20004},                {'name':'John','age':20,'salary':1234}] # 将字典转换为XML格式(bytes形式)bxml = dicttoxml.dicttoxml(d, custom_root = 'persons') #模块中的同名函数#print(bxml)xml = bxml.decode('utf-8') #将代码使用utf-8解析#print(xml)# 解析xml字符串为可读的格式化输出dom = parseString(xml)prettyxml = dom.toprettyxml(indent = '    ')print(prettyxml)os.makedirs("files", exist_ok = True)f = open('files/persons.xml','w',encoding='utf-8')f.write(prettyxml)f.close()使用cloudIDE运行demo.py,python环境需要首先安装dicttoxml:user@gwvm2a1fnntuar8-machine:~/sdf-1635319411781$ pip install dicttoxmlDefaulting to user installation because normal site-packages is not writeableLooking in indexes: https://repo.huaweicloud.com/repository/pypi/simpleLooking in links: https://obs-workspace-20180810.obs.cn-north-1.myhuaweicloud.com/pypi/index.htmlCollecting dicttoxml  Downloading https://repo.huaweicloud.com/repository/pypi/packages/74/36/534db111db9e7610a41641a1f6669a964aacaf51858f466de264cc8dcdd9/dicttoxml-1.7.4.tar.gz (18 kB)Building wheels for collected packages: dicttoxml  Building wheel for dicttoxml (setup.py) ... done  Created wheel for dicttoxml: filename=dicttoxml-1.7.4-py3-none-any.whl size=17463 sha256=be43aebf0e7ea56c138ebf2e1bf14f0b15a81fb0155ad8b6ea84d408475b8cf1  Stored in directory: /home/user/.cache/pip/wheels/de/80/18/aecfd193b0578b272c933f413c05b21f693bbc47cb1cc7f1ddSuccessfully built dicttoxmlInstalling collected packages: dicttoxmlSuccessfully installed dicttoxml-1.7.4WARNING: You are using pip version 21.2.4; however, version 21.3 is available.You should consider upgrading via the '/usr/bin/python3 -m pip install --upgrade pip' command.运行demo.pyuser@gwvm2a1fnntuar8-machine:~/sdf-1635319411781$ /usr/bin/python /home/user/sdf-1635319411781/demo.py<?xml version="1.0" ?><persons>    <item type="int">20</item>    <item type="str">names</item>    <item type="dict">        <name type="str">Bill</name>        <age type="int">30</age>        <salary type="int">2000</salary>    </item>    <item type="dict">        <name type="str">李宁</name>        <age type="int">123</age>        <salary type="int">20004</salary>    </item>    <item type="dict">        <name type="str">John</name>        <age type="int">20</age>        <salary type="int">1234</salary>    </item></persons>user@gwvm2a1fnntuar8-machine:~/sdf-1635319411781$ 生成的文件files/person.xml<?xml version="1.0" ?><persons>    <item type="int">20</item>    <item type="str">names</item>    <item type="dict">        <name type="str">Bill</name>        <age type="int">30</age>        <salary type="int">2000</salary>    </item>    <item type="dict">        <name type="str">李宁</name>        <age type="int">123</age>        <salary type="int">20004</salary>    </item>    <item type="dict">        <name type="str">John</name>        <age type="int">20</age>        <salary type="int">1234</salary>    </item></persons>
  • [技术干货] python读取xml文件练习
    products.xml文件内容:<root>    <products>        <product uuid='1234'>            <id>10000</id>            <name>iPhone9</name>            <price>9999</price>        </product>        <product uuid='4321'>            <id>20000</id>            <name>特斯拉</name>            <price>1000000</price>        </product>        <product uuid='5678'>            <id>30000</id>            <name>Mac Pro</name>            <price>40000</price>        </product>            </products></root>vi demo.py# 读取与检索XML文件from xml.etree.ElementTree import parsedoc = parse('products.xml') #读取整个文件的句柄for item in doc.iterfind('products/product'): #解析单个产品    # 读取id节点的值    id = item.findtext('id')    # 读取name节点的值    name = item.findtext('name')    # 读取price节点的值    price = item.findtext('price')        #uuid = item.get('uuid')    print('uuid','=', item.get('uuid'))    print('id','=',id)    print('name','=',name)    print('price','=',price)    print('-----------------')    使用cloudIDE运行结果:user@a2ns6m9d57dyrps-machine:~/sdf-1635317644253$ /usr/bin/python /home/user/sdf-1635317644253/demo.pyuuid = 1234id = 10000name = iPhone9price = 9999-----------------uuid = 4321id = 20000name = 特斯拉price = 1000000-----------------uuid = 5678id = 30000name = Mac Proprice = 40000-----------------user@a2ns6m9d57dyrps-machine:~/sdf-1635317644253$ 
  • [其他] python字典
    字典是数据的无序集合,用于存储数据值。与其他仅将单个值作为项的数据类型不同,字典具有键-值对。字典中的键和值之间用冒号“:”分隔字典的三种赋值操作x = {'food':'Spam', 'quantity':4, 'color':'pink'} X =dict(food='Spam', quantity=4, color='pink') x = dict([("food", "Spam"),("b", "2"), ("color", "pink")]) dict.copy():拷贝数据d =x.copy() d['color'] = 'red' print(x) # {'food':'Spam','quantity':4,'color':'pink'} print(d) # {'food':'Spam','quantity':4,'color':'red'} 元素访问 print(d.get('name')) # 输出None print(d.get('name', '键值不存在!')) # 输出 键值不存在 print(d.keys()) # 输出dict_keys(['food', 'quantity', 'color']) print(d.values()) # 输出dict_values(['Spam', 4, 'pink']) print(d.items())   输出 dict_items([('food', 'Spam'), ('quantity', 4), ('color', 'pink')])d.clear() # 清空字典中的所有数据 print(d) # 输出 {} del(d) # 删除字典 print(d) # 程序异常,提示“d”未定义
  • [其他] python列表
    python中的列表是一个功能强大的集合,用中括号表示。列表的数据类型可以不一样,可以列表中包含列表。下面将列表的相关知识用代码展示一下:animals = ['cat', 'dog', 'monkey'] # list.append(obj):在列表末尾添加新的对象。 animals.append('fish') # 追加元素 print(animals) # 输出 ['cat', 'dog', 'monkey', ‘fish’] # list.remove(obj):移除列表中某个值的第一个匹配项。 animals.remove('fish') # 删除元素fish print(animals) # 输出 ['cat', 'dog', 'monkey'] # list.insert(index, obj):用于将指定对象插入列表的指定位置。index:插入位置 animals.insert(1,'fish') # 在下标1的地方插入元素fish print(animals) # 输出 ['cat', ‘fish’, 'dog', 'monkey'] # list.pop([index=-1]):要移除列表中对下标对应的元素(默认是最后一个)。Index:下标 animals.pop(1) # 删除下标为1的元素 print(animals) # 输出 ['cat', 'dog', 'monkey'] #遍历并获取元素和对应索引 # enumerate(sequence) :将一个可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。 for i in enumerate(animals): print(i) # 元素下标和元素所组成的索引 #输出:(0, cat) # (1, dog) # (2, monkey) #列表推导式 squares = [x*2 for x in animals] # 批量生成符合规则的元素组成的列表 print(squares) #['catcat ', 'dogdog ', 'monkeymonkey '] list1 = [12, 45, 32, 55] # list.sort(cmp=None, key=None, reverse=False):cmp为可选参数, 如果指定了该参数,会使用该参数的方法进行排序。key是用来进行比较的元素。reverse为排序规则,False为升序。 list1.sort() # 对列表进行排序 print(list1) # 输出[12, 32, 45, 55] # list.reverse():反向列表中元素。 list1.reverse() # 对列表进行逆置 print(list1) # 输出[55, 45, 32, 12]
  • [其他] Python面试经验与面试题总结
    关于Python的面试经验一般来说,面试官会根据求职者在简历中填写的技术及相关细节来出面试题。一位拿了大厂技术岗Special Offer的网友分享了他总结的面试经验。当时,面试官根据他在简历中所写的技术,面试题出的范围大致如下:· 数据类型有几种、有什么区别· 进程、线程、协程的定义及区别·深浅拷贝的区别· 常用开发模式·函数式编程、对象式编程· 闭包、装饰器· 垃圾回收机制· linux常用命令,举例说明1、如何在Python中管理内存?Python中的内存管理由Python私有堆空间管理。对象和数据结构位于私有堆中,开发者无权访问此私有堆,是Python解释器负责处理的。Python对象的堆空间分配由内存管理器完成。核心API提供了一些开发者编写代码的工具。Python内置的垃圾回收器会回收使用所有的未使用内存,使其适用于堆空间。2、解释Python中的Help()函数和Dir()函数。Help()函数是一个内置函数,作用是查看函数和详细说明模块用途。运行结果是:Dir()函数是Python内置函数,Dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。举个例子展示其使用方法:运行结果是:3、当Python退出时,是否会清除所有分配的内存?答案是否。当Python退出时,对其他对象具有循环引用的Python模块,以及从全局名称空间引用的对象不会被解除分配或释放。无法解除分配C库保留的那些内存部分。退出时,由于拥有自己的高效清理机制,Python会尝试取消分配/销毁其他所有对象。4、什么是猴子补丁?在运行期间动态修改一个类或模块。运行结果是:5、Python中的字典是什么?字典指的是Python中的内置数据类型。它定义了键和值之间的一对一关系,包含了一对键及其对应的值。字典由键索引。6、解释一下Python中的逻辑运算符。Python中有3个逻辑运算符:and,or,not。7、为什么不建议以下划线作为标识符的开头?Python没有私有变量的概念,所以约定速成以下划线为开头来声明一个变量为私有。如果不想让变量私有,则不要使用下划线开头。8、什么是Flask?Flask是Python编写的一款轻量级Web应用框架。WSGI 工具箱采用 Werkzeug ,模板引擎使用 Jinja2。Flask使用 BSD 授权。Werkzeug和Jinja2是其中的两个环境依赖。Flask不需要依赖外部库。9、解释Python中的join()和split()函数。Join()可用于将指定字符添加至字符串中。运行结果是:Split()可用于指定字符分割字符串。运行结果是:10、Python中的标识符长度有多长?标识符可以是任意长度。在命名标识符时还必须遵守以下规则:· 只能以下划线或者 A-Z/a-z 中的字母开头· 其余部分可以使用 A-Z/a-z/0-9· 区分大小写· 关键字不能作为标识符11、Python中是否需要缩进?需要。Python指定了一个代码块。循环,类,函数等中的所有代码都在缩进块中指定。通常使用四个空格字符来完成。如果开发者的代码没有缩进,Python将无法准确执行并且也会抛出错误。12、请解释使用*args的含义。当我们不知道向函数传递多少参数时,比如我们向传递一个列表或元组,我们就使用*args。运行结果是:13、深拷贝和浅拷贝之间的区别是什么?浅拷贝是将一个对象的引用拷贝到另一个对象上,如果在拷贝中改动,会影响到原对象。深拷贝是将一个对象拷贝到另一个对象中,如果对一个对象的拷贝做出改变时,不会影响原对象。14、Python中如何实现多线程?Python是多线程语言,其内置有多线程工具包。多线程能让我们一次执行多个线程。Python中的GIL(全局解释器锁)确保一次执行单个线程。一个线程保存GIL并在将其传递给下个线程之前执行一些操作,看上去像并行运行的错觉。事实上是线程在CPU上轮流运行。所有的传递会增加程序执行的内存压力。15、Python中的闭包是什么?当一个嵌套函数在其外部区域引用了一个值时,该嵌套函数就是一个闭包。其意义就是会记录这个值。比如:运行结果是:16、Python的优势有哪些?· Python 易于学习· 完全支持面向对象· 高效的高级数据结构,可用少量代码构建出多种功能· 拥有最成熟的程序包资源库之一· 跨平台而且开源17、什么是元组的解封装?首先,我们先展示解封装:将 3,4,5 封装到元组 mytuple 中,再将值解封装到变量 x,y,z 中:得到结果为12。18、什么是PEP?PEP代表Python Enhancement Proposal,是一组规则,指定如何格式化Python代码以获得最大可读性。19、列表和元组之间的区别是什么?主要区别是列表是可变的,元组是不可变的。比如以下举例:会出现以下报错:20、什么是Python模块?Python中有哪些常用的内置模块?Python模块是包含Python代码的.py文件。此代码可以是函数类或变量。常用的内置模块包括:random、data time、JSON、sys、math等。
  • [技术干货] python统计文件中单次出现的次数
    练习题:编写一个Python程序,从当前目录的文本文件words.txt中读取所有的内容(全都是英文单词),并统计其中每一个英文单词出现的次数。单词之间用逗号(,)、分号(;)或空格分隔,也可能是这3个分隔符一起分隔单词。将统计结果保存到字典中,并输出统计结果。假设words.txt文件的内容如下:test star test star star;bus  test bill,new yeah bill,book bike God start python whatvi demo.pyimport ref = open('words.txt','r')words = f.read()wordList = re.split('[ ,;]+',words)print(wordList)countDict = {}for word in wordList:        if countDict.get(word) == None:        countDict[word] = 1        else:                countDict[word] = int(countDict[word]) + 1for (key,value) in countDict.items():    print(key,'=',value)    f.close()用CloudIDE打开一个项目,新建上面的demo.py和words.txt。运行结果:user@wvvmphyg0xg5h3c-machine:~/ghj-1635257235820$ /usr/bin/python /home/user/ghj-1635257235820/demo.py['test', 'star', 'test', 'star', 'star', 'bus', 'test', 'bill', 'new', 'year', 'bill', 'book', 'bike', 'God', 'start', 'python', 'what']test = 3star = 3bus = 1bill = 2new = 1year = 1book = 1bike = 1God = 1start = 1python = 1what = 1user@wvvmphyg0xg5h3c-machine:~/ghj-1635257235820$常见的热词统计。
  • [技术干货] python中文件写入练习题
    这是李宁老师的python文件和流使用章节的课后习题,用星号生成菱形,只是这里要求写入文件。vi demo.py#编写一个Python程序,从控制台输入一个奇数,然后生成奇数行的星号(*)菱形,并将该菱形保存到当前目录下的stars.txt文件中。line = input('请输入行数(必须是奇数):')line = int(line)if line % 2 != 0:    f = open('stars.txt','w')    import os    spaceNum = line // 2    # 每行的最大空格数        i = 1        lineSpaceNum = spaceNum     # 当前行的前后空格数        # 生成上三角形        while lineSpaceNum >= 0:        f.write(' ' * lineSpaceNum)        f.write('*' * (2 * i - 1))        f.write(' ' * lineSpaceNum + os.linesep)         lineSpaceNum -= 1                i += 1        i -= 2        lineSpaceNum += 2    # 生成下三角形        while lineSpaceNum <= spaceNum:                f.write(' ' * lineSpaceNum)                f.write('*' * (2 * i - 1))                f.write(' ' * lineSpaceNum + os.linesep)               lineSpaceNum += 1                i -= 1        f.close()else:        print('必须输入奇数')应用cloudIDE的环境运行练习:me/user/phoenix-sample-1635252861617/demo.pye-1635252861617$ /usr/bin/python /hom请输入行数(必须是奇数):3user@n8tsvesj6aczqi2-machine:~/phoenix-sample-1635252861617$ /usr/bin/python /home/user/phoenix-sample-1635252861617/demo.py请输入行数(必须是奇数):21user@n8tsvesj6aczqi2-machine:~/phoenix-sample-1635252861617$ 
  • [技术干货] python中文件和流使用练习4
    python文件和流练习,使用FileInput对象读取文件vi demo.pyimport fileinputfileobj = fileinput.input('./url.txt')print(type(fileobj))print(fileobj.readline().rstrip())for line in fileobj:    #line = line.rstrip()    if line !='':         print(fileobj.lineno(),':',line)    else:        print(fileobj.filename())运行结果:user@e7q53zougr2la7e-machine:~/sdf-1635251478816$ /usr/bin/python /home/user/sdf-1635251478816/demo.py<class 'fileinput.FileInput'>http://www.baidu.com2 : https://www.jd.com3 : https://www.hao123.com4 : http://www.sohu.comuser@e7q53zougr2la7e-machine:~/sdf-1635251478816$ 这里遇到一个问题:readline()执行完,会将读完的行移出fileobj对象,后面的for循环读出的就是剩余的行。
  • [技术干货] python中文件和流使用练习3
    python文件操作整行读写练习vi demo.py# 读行与写行import osf = open('./url.txt', 'r+')url = ''while True:        url = f.readline()        url = url.rstrip()        if url == '':        break;     else:               print(url)print('--------------')f.seek(0)print(f.readlines())f.write(os.linesep+'http://baidu.com' + os.linesep)f.close()f = open("./url.txt", 'a+')urlList = ['https://google.com' + os.linesep,'https://jd.com' + os.linesep]f.writelines(urlList)f.close()运行结果:user@yz0dz02025kev6h-machine:~/ghj-1635174013674$ /usr/bin/python /home/user/ghj-1635174013674/demo.pyhttps://123.com--------------['https://123.com\n']user@yz0dz02025kev6h-machine:~/ghj-1635174013674$ 文件 url.txt内容:https://123.comhttp://baidu.comhttps://google.comhttps://jd.com 
  • [技术干货] python中文件和流使用练习2
    python文件读写管道输出练习:vi demo1.py'''管道输出 |  从标准输入读取所有的数据,并按行将数据保存到列表中,然后过滤出所有包含“demo”的行,并输出这些行ls -al | python demo1.pysort'''import sysimport osimport re# 从标准输入读取全部数据text = sys.stdin.read()files = text.split(os.linesep)for file in files:        result = re.match('.*demo*',file)        if result != None:                print(file)    运行结果:user@uht0ff7cqwm3wk0-machine:~/ghj-1635172373079$ ls -al | python demo1.py-rw-r--r--  1 user user  439 Oct 25 22:42 demo1.py-rw-r--r--  1 user user    0 Oct 25 22:41 demo2.txt-rw-r--r--  1 user user    0 Oct 25 22:42 demo3.pyuser@uht0ff7cqwm3wk0-machine:~/ghj-1635172373079$ 搜噶,这样以后就可以批量处理日志文件拉取告警之类的了。
  • [技术干货] python中文件和流使用练习1
    python文件的打开方式常用的有5种:r:只读文件。w:写文件。r+:文件可读写,如果文件不存在,会抛出异常。如果文件存在,会从当前位置开始写入新内容,通过seek()可以改变当前文件的位置,也就是移动文件的指针。w+:文件可读写,如果文件不存在,会创建一个新文件;如果文件存在,会清空整个文件,并写入新内容。a+:文件可读写,如果文件不存在,会创建一个新文件;如果文件存在,会将要写入的内容添加到原文件的最后。也就是说,使用a+打开已经存在的文件,文件指针已经在文件的结尾了write(string):向文件写入内容,该函数会返回写入文件的字节数。read([n]):读取文件的内容,n是一个整数,表示从文件指针指定的位置开始读取的n个字节。如果不指定n,该函数会读取从当前位置往后的所有的字节。该函数会返回读取的数据。seek(n):重新设置文件指针,也就是改变文件的当前位置。如果使用write函数写入内容后需要使用seek(0)重置文件指针。close():关闭文件,对文件进行读写操作后,关闭文件是一个好习惯。vi demo1.py# 以写模式打开test1.txt文件f = open('./files/test1.txt','w')# 向test1.txt文件中写入“I love  ”“python”print(f.write("I love "))print(f.write("python"))f.close();f = open('./files/test1.txt','r')print(f.read(7))print(f.read(6))f.close();try:        f = open('./files/test2.txt','r+')  #打开一个不存在的文件,抛出异常except Exception as e:        print(e)# a+f = open('./files/test2.txt', 'a+')print(f.write('hello'))f.close();f = open('./files/test2.txt','a+')print('-----1------')print(f.read())  #已经在文件尾,读出空f.seek(0)      #指针移动至开头print('-----2------')print(f.read())  #读出全部内容f.close()# w+try:        f = open('./files/test2.txt','w+')        print(f.read())        f.write('How are you?')        f.seek(0)        print(f.read())finally:        f.close();执行结果:user@zsxyx1uggjsv8cj-machine:~/ghj-1635170591718$ /usr/bin/python /home/user/ghj-1635170591718/demo1.py76I love python[Errno 2] No such file or directory: './files/test2.txt'5-----1-----------2------helloHow are you?user@zsxyx1uggjsv8cj-machine:~/ghj-1635170591718$ 
  • [技术干货] python子类继承super方法练习
    使用super函数,可以在子类实例中直接调用父类的方法。下面练习一个实例:vi demo03.pyclass Bird:    def __init__(self):        self.hungry = True        print('Bird的构造方法')    def eat(self):        if self.hungry:            print('已经吃了虫子')            self.hungry = False        else:            print('已经吃过了')b = Bird()b.eat()b.eat()class SongBird(Bird):    def __init__(self):        super().__init__() #使用super()函数调用父类的构造函数。        self.sound = '唱歌'        print('SongBird的构造方法')    def sing(self):        super().eat()        print(self.sound)sb = SongBird()sb.sing()sb.eat()print("---------------")class MyClass0:    def __init__(self):        print('MyClass0')class MyClass1(MyClass0):    def __init__(self):        print('MyClass1')    class MyClass2(MyClass1):    def __init__(self):        print('MyClass2')class MyClass3(MyClass2):    def __init__(self):        print('MyClass3')        super(MyClass1,self).__init__() #super()有两个参数,第一个参数是引用的类,第二个是所在的实例。m = MyClass3()运行结果,sb.eat()已经不报错了。9/demo03.py2us30-machine:~/ghj-1634805525109$ python /home/user/ghj-1634805525109Bird的构造方法已经吃了虫子已经吃过了Bird的构造方法SongBird的构造方法已经吃了虫子唱歌已经吃过了---------------MyClass3MyClass0user@ilgqw02us30-machine:~/ghj-1634805525109$ 
  • [技术干货] python子类方法练习一例
    代码取自李宁老师的培训课程。python 类的构造方法以左右两个下划线为界,固定命名为init方法。子类可以继承自父类,重写普通方法和构造方法;如果子类B和父类A的方法名一样,那么调用子类的实例的同名方法名,并不像java会自动适配参数类型和个数,也就是不会考虑参数不同的方法。实例1:vi demo02.pyclass Bird:    def __init__(self):        self.hungry = True        print('Bird的构造方法')    def eat(self):        if self.hungry:            print('还没吃虫子,开始吃虫子')            self.hungry = False        else:            print('已经吃过了')b = Bird()b.eat()b.eat()class SongBird(Bird):    def __init__(self):        self.sound = '唱歌'        print('SongBird的构造方法')    def sing(self):        print(self.sound)    def eat(self,thing):        print(thing)sb = SongBird()sb.sing()sb.eat("虫子")运行结果:ser@mj53s0zdl98-machine:~/ghj-1634802506020$ /usr/bin/python /home/user/ghj-1634802506020/demo02.pyBird的构造方法还没吃虫子,开始吃虫子已经吃过了SongBird的构造方法唱歌虫子如果不重写eat(),运行结果会报错,因为父类构造函数需要hungry,子类重写了构造函数,所以父类的构造函数不执行,就没有hungry参数:4803595898/demo02.pyhine:~/ghj-1634803595898$ /usr/bin/python /home/user/ghj-1634Bird的构造方法还没吃虫子,开始吃虫子已经吃过了SongBird的构造方法唱歌Traceback (most recent call last):  File "/home/user/ghj-1634803595898/demo02.py", line 28, in <module>    sb.eat()  File "/home/user/ghj-1634803595898/demo02.py", line 11, in eat    if self.hungry:AttributeError: 'SongBird' object has no attribute 'hungry'user@oejtkh9lbks-machine:~/ghj-1634803595898$
总条数:2474 到第 页
上滑加载中