victory的博客

长安一片月,万户捣衣声

0%

盒子布局管理器

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

django中两种模板目录设置

在进行django项目开发中,我们需要创建一个用于存放模板的文件夹,模板文件夹通常放在以下两个位置之一。
第一种的项目目录为蓝色框所框选的目录,第二种的项目目录为红色框所框选的目录。

位置(1)的优缺点:

优点: 便于移植(首次开发完application应用,可将application应用移植到其他项目)
缺点: 项目下的每个应用都有一个templates文件夹,不便于管理

位置(2)的优缺点:

优点: 便于管理模板文件
缺点: 不方便移植到其他项目中

session实现用户登录

下面将使用session实现用户登录,如下图所示效果:

步骤:

1.在views.py文件中创建视图(假定我们创建了一个名为booktest的应用)

def index(request):
    uname = request.session.get('myname', default='未登录')
    context = {'uname': uname}
    return render(request, 'booktest/index.html', context)


def login(request):
    return render(request, 'booktest/login.html')


def login_handle(request):
    uname = request.POST['uname']
    request.session['myname'] = uname
    return redirect('/booktest/index/')


def logout(request):
    # del request.session['myname']  # 删除会话
    # request.session.clear()  # 清除所有会话
    request.session.flush()  # 删除当前的会话数据并删除会话的Cookie
    return redirect('/booktest/index/')

2.配置url

主url:
from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^booktest/', include("booktest.urls", namespace='booktest')),
]
应用url:
from django.conf.urls import include, url
import views


urlpatterns = [
    url(r'^index/$', views.index),
    url(r'^login/$', views.login),
    url(r'^login_handle/$', views.login_handle),
    url(r'^logout/$', views.logout3),

]

3.创建模板

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
你好:{{ uname }}
<br>
<a href="/booktest/session2/">登录</a>
<br>
<a href="/booktest/session3/">退出</a>
</body>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="post" action="/booktest/session2_handle/">
    <input type="text" name="uname">
    <input type="submit" name="登录">
</form>
</body>
</html>

4.配置模板路径DIRS
注:templates为和应用同级的文件夹,本应用的模板存在templates/booktest/下

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

在基于HTTP的请求当中,客户端发送请求到服务器端,服务器端响应请求返回一些信息(包含cookie)。
1.cookie是什么?
cookie:存储在浏览器当中的文本信息,存储格式:键值对,一旦你访问某个网站,存储了这个键值对,后面再次请求这个服务器时,cookie会自动加到请求报文的头里面发送到服务器。

2.cookie是怎么来的?
我们在服务器端设置(set_cookie())的,通过response返回到浏览器,浏览器将cookie存储下来
注:cookie是区别于域名的,跨域名不能共享cookie信息
3.一种常见的场景
假设我们在淘宝网站浏览了运动鞋商品,在我们浏览其他网站时会看到与我们之前浏览的运动鞋类似的商品推荐,
“cookie是区别于域名的”,这句话似乎错了??
答:此时的现象并不是其他网站读取了淘宝网站的cookie,而是在其他网站内嵌了淘宝网站,即此时的运动鞋商品
推荐的信息是从淘宝网站本身读取到的,原理如下图所示: