python基础(下)

一、多线程

import time, datetime
import threading
print("start of program...")

def test():
    print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
          "Action: sleep..")
    time.sleep(5)
    print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
          "Action:wake up")

threadObj = threading.Thread(target=test)
threadObj.start()
print("Enf of program")
---
start of program...
2018-01-17 17:22:21 Action: sleep..
Enf of program
2018-01-17 17:22:26 Action:wake up

向线程的目标函数中传递参数

>>> import threading
>>> threadObj = threading.Thread(target=print,args=['Cats','Dogs','Frogs'],kwargs={'sep':'&'})
>>> threadObj.start()
Cats&Dogs&Frogs

从python中启动其他的程序

from subprocess import Popen
Popen(r"C:\Program Files\Sublime Text 3\sublime_text.exe")

二、类的简单使用

1.基础类

class Dog():
    def __init__(self, age, name):
        self.age = age
        self.name = name

    def DescribeDog(self):
        print("My Dog's name is %s and now it is %s years old." %
              (self.name.title(), self.age))


MyDog = Dog("1", "dahuang")
MyDog.DescribeDog()
-----
My Dog's name is Dahuang and now it is 1 years old.

2.父类、子类及类的调用

# ================================1.car 的父类================================
class Car():
    def __init__(self, make, model, years):
        """make:生产商,model:型号,years:生产年限"""
        self.make = make
        self.model = model
        self.years = years
        self.odometer_reading = 0  # 设置一个参数,汽车跑的总里程数,初始值为0,无需外界传入

    def get_descriptive_name(self):
        long_name = str(self.years) + ',' + self.model + ',' + self.make
        return long_name.title()    

    def read_odometer(self):
        # self.odometer_reading = 23
        print("this car has " + str(self.odometer_reading) + " miles on it.")

    def update_odometer(self, newmiles):
        """
            将里程表读数设定为指定的值
            禁止将里程表的读数往回拨
        """    
        # self.odometer_reading = newmiles
        if self.odometer_reading <= newmiles:
            self.odometer_reading = newmiles
        else:
            print("you can not rollback an old meter !")

# ======================2.子类的创建======================================
# 创建子类时,父类必须包含在当前文件中,且位于子类前面
# 创建子类的实例时,Python首先需要完成的任务是给父类的所有属性赋值
# super()是一个特殊函数,帮助Python将父类和子类关联起来
# =========================================================================
class ElectricCar(Car):  # 括号中object表示从哪里继承父类
    def __init__(self, make, model, years):
        super().__init__(make, model, years)  # 继承父类的属性(其中的方法),与Python2 版本中写法不一样
        self.battery = Battery(66)              # 调用Battery类

    def read_odometer(self):
        """重写父类的方法:在子类中定义一个与要重写的父类方法同名。这样,Python就不会继承这个父类方法"""
        print("elc car not need read miles.")


# ============================3.将实例用作属性==================================
# 将类的一部分作为一个独立的类提取出来,可以将大型类拆分成多个协同工作的小类
# 如下方的Battery实例可以用作ElectricCar类的一个属性
# ==============================================================================
class Battery():
    def __init__(self, battery_size=100):
        """初始化电池的容量"""
        self.battery_size = battery_size

    def describe_battery(self):
        """描述电池剩余量"""
        print("this electriccar has a " + str(self.battery_size) + " -kWh battery.")

my_car = Car('benci', 'hhhh', 2017)
elc_car = ElectricCar('aodi', 'yy', 2018)
print(my_car.get_descriptive_name())
print(elc_car.get_descriptive_name())
elc_car.read_odometer()
# my_car.odometer_reading = 50
my_car.update_odometer(50)
my_car.read_odometer()
elc_car.battery.describe_battery()  # 调用3中的battery类

三、JSON 对象

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。

  • json.dumps 将 Python 对象编码成 JSON 字符串
  • json.loads 将已编码的 JSON 字符串解码为 Python 对象

Note: json.dumps()与json.dump()的区别在于json.dumps()用于将dict类型的数据转成str,json.dump()用于将dict类型的数据转成str,并写入到json文件中,同理,json.loads()是用于将str类型的数据转成dict, json.load()用于从json文件中读取数据。

python 原始类型向 json 类型的转化对照表.png

Eg1:json.dumps()和json.loads()的简单应用举例

import json
data = {'a': '1111', 'b': '2222', 'c': '3333', 'd': '4444'}
jsDumps = json.dumps(data)
jsLoads = json.loads(jsDumps)
print(data, type(data), jsDumps, type(jsDumps), jsLoads, type(jsLoads), sep='\n')
---
{'c': '3333', 'b': '2222', 'd': '4444', 'a': '1111'}
<class 'dict'>
{"c": "3333", "b": "2222", "d": "4444", "a": "1111"}
<class 'str'>
{'c': '3333', 'b': '2222', 'd': '4444', 'a': '1111'}
<class 'dict'>

# 如果想要数据展示的美观点,可以添加点其他参数如缩进,排序等
print(json.dumps(data, sort_keys=True, indent=4, separators=(',', ':')))
-----
{
    "a":"1111",
    "b":"2222",
    "c":"3333",
    "d":"4444"
}

Eg2: json.load()和json.dump()的应用举例。

#!/usr/bin/env python
# coding=utf-8
"""
文档的功能:把用户名字记录到json文件中,当用户第二次打开时,检测到json文件中有该内容,就会直接将json文件中的内容反馈给用户。
"""    
import json

def get_stored_username():
    """如果存储了用户名,就获取它"""
    filename = 'username.json'
    try:
        with open(filename) as f_obj:
            username = json.load(f_obj)
    except FileNotFoundError:
        return None
    except ValueError:
        return None
    else:
        return username

def get_new_username():
    """提示用户输入用户名"""
    filename = 'username.json'
    username = input("What is your name? ")
    with open(filename, 'w') as f_obj:
        json.dump(username, f_obj)
    return username


def Welcome_user():
    """问候用户,并指出其名字"""
    username = get_stored_username()
    if username:
        print("Welcome back, " + username + "!")
    else:
        username = get_new_username()
        print("We'll remember you when you come back, " + username + "!")


Welcome_user()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,681评论 6 517
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,205评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 169,421评论 0 362
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,114评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,116评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,713评论 1 312
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,170评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,116评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,651评论 1 320
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,714评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,865评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,527评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,211评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,699评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,814评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,299评论 3 379
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,870评论 2 361