Python需知

1.Django中的MTV框架,各个文件都有哪些配置信息,项目中的project和application是一种什么关系的存在

MTV:
M:数据存取层,该层处理与数据相关的所有事物;如何存取,如何验证有效性,包含哪些行为以及数据之间的关系等
T:表现层,该层处理与表现相关的决定:如何在页面或者其他类型文档进行显示
V:业务逻辑层,该层包含存取模块及调取恰当模板的相关逻辑,可看做是模板与模板之间的桥梁。

Project创建之后会生成一些文件:
Manage.py:一种命令行工具,允许你以多种方式与该Django项目进行交互
Settings.py:该Django项目的设置与配置
Urls.py:Django项目的URL的设置,可视为你的Django网站的目录
Wsgi.py:服务器网关接口

App创建之后会生成一些文件:
Admin.py:后台管理文件
Migrations:数据库相关目录
Models.py:主要用一个python类来描述数据表,运用这个类,你可以通过简单的python的代码来创建、检索、更新、删除数据库中的记录,而无需写一条又一条的sql语句
Test.py:测试文件
Views.py:包含页面的业务逻辑

2.python的垃圾回收机制
主要引用计数来跟踪和回收垃圾。在引用计数的基础上,通过“标记-清除”解决容器对象可能产生的循环引用问题,通过“分代回收”以空间换时间的方法提高垃圾回收效率
在python中,大多数对象的生命周期都是通多对象的引用计数来管理的
1)引用创建或者复制:+1
2)对象的引用被销毁:-1
3)此对象无人使用,可销毁:0

3.python中都有哪些数据类型
字符串:索引、拼接、切片
列表:索引、切片、重复、连接
元组:不可变数据类型
字典:可变数据类型,无序,支持异构和嵌套
集合:符合数学中集合的一切特性。
需要区分的是remove,discard和pop这三种删除方法的区别:
remove删除时,元素不存在,直接报错;
discard删除时,元素不存在,do nothing;
pop是随机删除。

4.你写过哪些python脚本
安装python2/3

编码思路
1)先判断是不是root用户,root才可以进行软件的安装
2)交互式请求,询问root用户要安装哪个版本的python,现提供2/3
3)将源码编译过程中可能出现的问题进行if判断分析,比如下载源码包的过程网络出现故障,比如安装过程出现依赖包的问题
源代码:

#!/usr/bin/env python
#coding=utf-8
import os
import sys 

if os.getuid() == 0:
    pass
else:
    print '当前用户不是root用户,请以root用户执行脚本~'
    sys.exit(1)

version = raw_input('请输入你想要安装的python版本(2.7/3.5)')
if version == '2.7':
    url = 'https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz'
elif vesion == '3.5':
    url = 'https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz'
else:
    print '您输入的版本号有误,请输入:2.7/3.5'
    sys.exit(1)
cmd = 'wget '+url
res = os.system(cmd)
if res != 0:
        print '下载源码包失败,请检查网络'
        sys.exit(1)

if version == '2.7':
    package_name = 'Python-2.7.12'
else:
    package_name = 'Python-3.5.2'
cmd = 'tar xf '+package_name+'.tgz'
res = os.system(cmd)
if res != 0:
    os.system('rm '+package_name+'tgz')
    print '解压源码包失败,请重新运行这个脚本下载源码包'
    sys.exit(1)
cmd = 'cd '+package_name+' && ./configure --prefix=/usr/local/python && make && make install'
res = os.system(cmd)
if res != 0:
    print '编译python源码失败,请检查是否缺少依赖库'
    sys.exit(1)

5.你做过哪些python程序
socket编程
思想:
首先创建一个socket,然后绑定(bind)一个监听的主机及其端口
接受连接后,创建新线程来处理TCP连接

邮件收发系统
注意端口,pop3协议

跳一跳外挂:
思想:
获取跳一跳的实时截图,点击获得起始和终止位置,计算距离,计算按压时间,发送按压指令,重新刷新手机截图
程序解读:
自定义几个函数:
get_screen_images() //获取实时截图
jump_to_next(point1,point2) //发送跳跃指令函数
on_click(event,coor=[])
update_screen(frame) //更新照片

引入的模块说明:
PIL:图像处理标准库
Numpy:可用来存储和处理大型矩阵
Matplotlib:科学计算库,快速计算
Time:时间函数

6.list和tuple的区别
list是可变数据类型 []
tuple是不可变的 ()

7.django和flask有什么区别
django:Django 成熟、稳定、完善,整体生态相对封闭
flask:Flask 自由、灵活,可扩展性强

8.往list中添加元素的方法你知道哪些?
1)append()
2)insert()
3)extend()
4)“+”

9.python中新式类和旧式类(经典类)的区别
新:从object继承;基类搜索算法采用广度优先;相同父类只执行一次构造函数
旧:不需要从object继承;基类搜索算法采用深度优先;相同父类执行多次构造函数

10.python中的高级特性
迭代;生成器;切片;列表生成式

11.Python安装第三方模块都有哪些方法
方法一:pip install; easy_install
方法二:下载源码,解压源码包,手动运行setup.py install去安装

12.匿名函数你是怎么样理解的
作内联函数的单个表达式

13.Python中在函数进行传值的过程中,都有哪几种方式?
必选参数;默认参数;可变参数;关键字参数

14.如何能快速去掉一组元素中重复的元素
1)使用集合的不可重复特性
2)先通过fromkeys拿出所有的主键,然后,用keys()获得相应的value

15.闭包
函数里面有嵌套函数

16.装饰器
避免重复造轮子

17.在python中是没有switch这种结构的,请问你可以用什么方法来实现达到相同的目的
方法一:通过函数返回参数的形式
def numbers_to_strings(argument):
switcher = {
0: “zero”,
1: “one”,
2: “two”,
}
return switcher.get(argument, “nothing”)

方法二:通过:if…elif…else…的判断语句实现
举例:

#!/usr/bin/env python
#coding:utf-8
"""
file:ifelifelse.py
date:9/4/178:00 PM
author:hx
desc:if...elif...else...实现switch语句
"""
def add(x,y):
    return x+y
def cut(x,y):
    return x-y
def multi(x,y):
    return x*y
def div(x,y):
    return x/y

x=input("x:")
oper=raw_input("oper:")
y=input("y:")

if oper=="+":
    print add(x,y)
elif oper=="-":
    print cut(x,y)
elif oper=="*":
    print multi(x,y)
elif oper=="/":
    print div(x,y)
else:
    print "error"

运行结果:

/usr/bin/python2.7 /root/PycharmProjects/PyProjectV3/ifelifelse.py
x:1
oper:+
y:2
3

Process finished with exit code 0

方法三:通过字典实现: d= {“key”:func}
举例:

In [11]: from __future__ import division

In [12]: def add(x,y):
   ....:     return x+y
   ....: 

In [13]: def cut(x,y):
    return x-y
   ....: 

In [14]: def multi(x,y):
    return x*y
   ....: 

In [15]: def div(x,y):
    return x/y
   ....: 

In [16]: oper={'+':add,'-':cut,'*':multi,'/':div}

In [17]: print op
open  oper  

In [17]: print oper['+'](1,2)
3

In [18]: print add(1,2)
3

18.如何实现三目运算符
Python:maxNum=a if a>b else b
C:maxNum=a>b?a:b

19.Xrange和range的区别?
Xrange返回一个对象
Range返回一个数组

20.导入模块和导入包有什么区别?
导入模块实质是执行该模块的内容
导入包是运行包里面的init.py函数

21.picking和unpicking
picking模块接受任何python对象,并将其转化成字符串,使用tcpdump函数将其存储到文件中,这个过程称之为picking。
Unpicking是从存储的字符串表示中,检索原始python对象的过程

22.python中initnew之间的区别
1)如果在类中同时定义了init和new,在创建对象时会优先使用new
2)New方法会返回所构造的对象,init则不会。在使用new返回对象的时候,会隐式调用init函数
3)New函数必须以cls作为第一个参数,而init则以self作为其第一个参数

23.Python脚本可执行的前提
1)脚本的模式必须是可执行的
2)文件的第一行必须说明解释器的位置

24.*args和**kwargs
*args表示可变参数,允许传入0个或任意个无名参数,这些参数在函数调用时会自动组装为一个tuple;
**kwargs表示关键字参数,允许传入0个或任意个含名参数,这些参数在函数调用时会自动组装为一个dict;
同时使用这两个参数时,必须保证可变参数在关键字参数之前。

25.如何拷贝一个对象
1)赋值(=)
2)浅拷贝(copy.copy()),此方法是对原始对象的包含项的引用
3)深拷贝(copy.deepcopy()),此种方法创建的对象,会递归的赋值他所包含的对象
注意:不是所有的对象都可以拷贝

26.python自省
运行时能够获得对象的类型,比如:type(),dir(),getattr(),hasattr(),isinstance()

27.Python正则表达式
http://www.runoob.com/python/python-reg-expressions.html

27.Python标识符
构成:由字母、数字、下划线组成,但不能以数字开头。
注意:以下划线开头的标识符是有特殊意义的
_foo:代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用import *而导入;
__foo:代表类的私有成员;
foo:代表特殊方法专用的表示,如:init()代表类的构造函数

28.Print
print 默认输出是换行的,如果要实现不换行需要在变量末尾加上逗号 ,

29.Python解释器对模块位置的搜索顺序
1、当前目录
2、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
3、如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python 模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值