victory的博客

长安一片月,万户捣衣声

0%

使用urllib.request库从互联网上下载图片

# coding=utf-8

import urllib.request as request

url = 'http://localhost:8080/NoteWebService/logo.png'

with request.urlopen(url) as response:
    data = response.read()
    f_name = 'download.png'
    with open(f_name, 'wb') as f:
        f.write(data)
        print('下载文件成功')

POST请求

使用urllib.request模块可以在python中访问互联网资源,以下是发送POST请求的示例代码。

# coding=utf-8

import urllib.request

url = 'http://localhost:8080/NoteWebService/note.do'

# 准备HTTP参数
params_dict = {'action': 'query', 'ID': '10'}  # 准备将参数放到字典中
params_str = urllib.parse.urlencode(params_dict)  # 将字典参数转换为字符串,形式为action=query&ID=10

# 字符串转换为字节序列对象
params_bytes = params_str.encode()  # 发送POST请求时的参数要以字节序列形式发送

req = urllib.request.Request(url, data=params_bytes)  # 发送POST请求
with urllib.request.urlopen(req) as response:
    data = response.read()
    json_data = data.decode()
    print(json_data)

GET请求

使用urllib.request模块可以在python中访问互联网资源,以下是发送GET请求的示例代码。

# coding=utf-8

import urllib.request

# url中?后的内容是请求参数,多个参数之间以&分割
url = 'http://localhost:8080/NoteWebService/note.do?action=query&ID=10'

# 创建Request对象,默认是GET请求
req = urllib.request.Request(url)

with urllib.request.urlopen(req) as response:
    data = response.read()  # 读取数据,为字节序列数据
    json_data = data.decode()  # 将字节序列数据转换为字符串
    print(json_data)

wxPython控件

1.实现三个文本输入空间和三个静态文本
1.1界面效果

1.2示例代码

class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, title="文本输入控件", size=(300, 260))
        panel = wx.Panel(parent=self)
        tc1 = wx.TextCtrl(panel)
        tc2 = wx.TextCtrl(panel, style=wx.TE_PASSWORD)
        tc3 = wx.TextCtrl(panel, style=wx.TE_MULTILINE)

        userid = wx.StaticText(panel, label="用户ID:")
        pwd = wx.StaticText(panel, label="密码:")
        content = wx.StaticText(panel, label="多行文本:")

        # 创建垂直方向的盒子布局管理器对象
        vbox = wx.BoxSizer(wx.VERTICAL)

        # 添加控件到vbox布局管理器
        vbox.Add(userid, flag=wx.EXPAND | wx.LEFT, border=10)
        vbox.Add(tc1, flag=wx.EXPAND | wx.ALL, border=10)
        vbox.Add(pwd, flag=wx.EXPAND | wx.LEFT, border=10)
        vbox.Add(tc2, flag=wx.EXPAND | wx.ALL, border=10)
        vbox.Add(content, flag=wx.EXPAND | wx.LEFT, border=10)
        vbox.Add(tc3, flag=wx.EXPAND | wx.ALL, border=10)

        # 设置面板采用vbox布局管理器
        panel.SetSizer(vbox)

        # 设置tc1初始值
        tc1.SetValue('tony')
        # 获取tc1值
        print('读取用户ID:{0}'.format(tc1.GetValue()))

        tc2.SetValue('123')

        tc3.SetValue('这是一个多行文本!这是一个多行文本!这是一个多行文本!这是一个多行文本!这是一个多行文本!这是一个多行文本!')


app = wx.App()
frm = MyFrame()
frm.Show()
app.MainLoop()
阅读全文 »

布局管理器嵌套

实现效果:
单击Button1按钮,显示“Button1单击”静态文本,单击Button2按钮,显示“Button2单击”静态文本。

示例代码:

布局管理器嵌套

# coding=utf-8
import wx

class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, title="布局管理器嵌套", size=(300, 120))
        panel = wx.Panel(parent=self)
        self.static_text = wx.StaticText(parent=panel, label="请单击按钮")
        b1 = wx.Button(parent=panel, id=10, label='Button1')
        b2 = wx.Button(parent=panel, id=11, label='Button2')

        # 创建水平方向的盒子布局管理器hbox对象
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        # 添加b1到hbox布局管理器
        hbox.Add(b1, proportion=1, flag=wx.EXPAND|wx.ALL, border=10)
        hbox.Add(b2, proportion=1, flag=wx.EXPAND|wx.ALL, border=10)

        # 创建垂直方向的盒子布局管理器对象vbox
        vbox = wx.BoxSizer(wx.VERTICAL)
        # 添加静态文本到vbox布局管理器
        vbox.Add(self.static_text, proportion=1, flag=wx.CENTER | wx.FIXED_MINSIZE | wx.TOP, border=10)
        # 将水平hbox布局管理器对象添加到垂直vbox布局管理器对象
        vbox.Add(hbox, proportion=1, flag=wx.CENTER)

        # 设置面板(panel)采用vbox布局管理器
        panel.SetSizer(vbox)

        # 将两个按钮(b1和b2)的单击事件绑定到self.on_click办法
        self.Bind(wx.EVT_BUTTON, self.on_click, id=10, id2=11)

    def on_click(self, event):
        event_id = event.GetId()
        print(event_id)
        if event_id == 10:
            self.static_text.SetLabelText('Button1单击')
        else:
            self.static_text.SetLabelText('Button2单击')


app = wx.App()  # 创建应用程序对象
frm = MyFrame()  # 创建窗口对象
frm.Show()  # 显示窗口
app.MainLoop()  # 进入主事件循环

盒子布局管理器

wxPython提供了布局管理器类帮助实现界面布局,主要分为两大类:盒子布局管理器(类似于CSS中的弹性布局)和网格布局管理器。

下面我们做一个盒子布局管理器(垂直方向布局)的例子:
1.代码

# coding=utf-8
import wx
class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, title="事件处理", size=(300, 180))
        panel = wx.Panel(parent=self)
        self.statictext = wx.StaticText(parent=panel, label="请单击OK按钮")
        b = wx.Button(parent=panel, label="OK")
        self.Bind(wx.EVT_BUTTON, self.on_click, b)

        # 创建垂直方向的盒子布局管理器对象vbox
        vbox = wx.BoxSizer(wx.VERTICAL)
        # 添加静态文本到vbox布局管理器
        vbox.Add(self.statictext, proportion=1, flag=wx.ALIGN_CENTER_HORIZONTAL | wx.FIXED_MINSIZE | wx.TOP, border=30)
        # 添加按钮b到vbox布局管理器
        vbox.Add(b, proportion=1, flag=wx.EXPAND | wx.BOTTOM, border=10)
        panel.SetSizer(vbox)

    def on_click(self, event):
        self.statictext.SetLabelText('Hello, World.')


app = wx.App()  # 创建应用程序对象
frm = MyFrame()  # 创建窗口对象
frm.Show()  # 显示窗口
app.MainLoop()  # 进入主事件循环

2.界面

python中的filter函数和map函数

filter()

filter()用于对容器中的元素进行过滤处理

# coding=utf-8
# 提供过滤条件函数
def f1(x):
    return x > 50
    
data1 = [66, 15, 91, 28, 98, 50, 7, 90, 99]
filtered = filter(f1, data1)
data2 = list(filtered)
print(data2)


# lambda实现
data1 = [66, 15, 91, 28, 98, 50, 7, 90, 99]
filtered = filter(lambda x : (x > 50), data1)
data2 = list(filtered)
print(data2)

map()

map()用于对容器中的元素进行映射或变换

# coding=utf-8
# 提供变换规则的函数
def f1(x):
    return x * 2

data1 = [66, 15, 91, 28, 98, 50, 7, 90, 99]
mapped = map(f1, data1)
data2 = list(mapped)
print(data2)


# lambda实现
data1 = [66, 15, 91, 28, 98, 50, 7, 90, 99]
mapped = map(lambda x : (x * 2), data1)
data2 = list(mapped)
print(data2)

python可变参数

python中的函数可以定义接受不确定数量的参数,这种参数被称为可变参数

可变参数有两种:1)参数前加* 2)参数前加**
*可变参数在函数中被组装成一个元组
**可变参数在函数中被组装成一个字典、

代码示例:

# *可变参数
def sum(*numbers):
    total = 0.0
    
    for number in numbers:
        total += number
        
    return total
    
print(sum(100.0, 20.0, 30.0))  # 150
print(sum(30.0, 80.0))  # 110

# **可变参数
# coding=utf-8

def show_info(**info):
    print('-----show_info-----')
    for key,value in info.items():
        print("{0} - {1}".format(key, value)
        
show_info(name='Tony', age=18, sex=True)
show_info(student_name='Tony', student_no='1000')

python中如何实现函数重载的效果

什么是函数重载?

函数重载,即可以定义多个同名函数,但是参数列表不同,这样在调用时可以传递不同的实参。

python中没有函数重载的概念

函数重载会增加代码量,所以在python中没有函数重载的概念,而是为函数的参数提供默认值实现的。

实例

# coding=utf-8

def make_coffee(name='卡布奇诺'):
    return "制作一杯{}".format(name)
    
coffee1 = make_coffee('拿铁')  # 提供参数
coffee2 = make_coffee()  # 没有提供参数,使用默认值
print(coffee1)
print(coffee2)

如何计算深度学习代码实践中的trainsteps?

深度学习中已经有epoch参数了,为什么还要再定义steps参数?

epoch:全体训练数据过几遍

steps:模型会计算几次loss,即模型参数会更新几次梯度

当我们训练模型时,epoch变成了一个间接的关注对象,我们关系模型能更新多少次,这些才知道循环多少次,计算多少次loss。其实最主要的一点是训练步数与模型的参数会有相关关系,比如如果要采用自适应学习率,那每步都是有一个不同的学习率的。

train steps通常按以下公式进行计算:
train steps = len(data) // batch_size