python基础

本笔记来源于以下:

《Head First Python》

有效使用IDLE

TAB:提供建议

Alt-P:回退到IDLE中之前输入的代码语句

Alt-N:移到下一个代码语句

BIF

BIF会自动导入到__main__命名空间,但是有它们自己的命名空间,这个命名空间为__builtins__

dir(__builtins__):可以看到python提供的内置方法列表

print():把消息显示到标准输出(通常是屏幕,在python中,是指"sys.stdout",可以从标准库的"sys"模块导入),会模仿python解释器实际存储列表数据的格式来显示数据,所得到的输出不再做进一步处理,只是告诉数据在内存中的样子

print('norwegian', file=out)

len():得出列表中有多少个数据项

isinstance(names, list):允许检查某个特定标识符是否包含某个特定类型的数据

list():工厂函数,创建一个新的空列表

range():返回一个迭代器,根据需要生成一个指定范围的数字

enumerate():创建对数据的一个编号列表,从0开始

int():将一个字符串或另一个数转换为整数

id():返回一个python数据对象的唯一标识

next():返回一个可迭代数据结构(如列表)中的下一项

open():打开一个磁盘文件,创建一个迭代器从文件读取数据,一次读取一个数据行

type():查看标识符是哪种数据类型

input():接收键盘输入,把输入的内容作为一个字符串返回给代码,而且已经去除了尾部的所有换行符

in = open('in.txt')
# 使用访问模式w时,如果这个文件已存在,会清空它现有的内容
out = open('out.txt','w')
# 追加到一个文件,使用访问模式a
aout = open('out.txt', 'a')
# 打开一个文件来完成写和读(不清除),使用w+
in_and_out = open('in_and_out.txt', w+)
# 如果想打开一个文件完成写,但是不存在,首先会创建这个文件,然后再打开文件进行写

locals():返回当前作用域中定义的所有名的一个集合

标准库

glob()

适合处理文件名列表

import glob
data_files = glob.glob("data/*.txt")
cgitb()

允许在浏览器中查看CGI编码错误

import cgitb
cgitb.enable()

列表使用方法

声明:cast = ["Palin", 'Jones']

访问:cast[1]

在列表末尾增加一个数据项:cast.append("Gill")

从列表末尾删除数据:cast.pop()

在列表末尾增加一个数据项集合:cast.extend(['chap', 'gill'])

在列表中找到并删除一个特定的数据项:cast.remove('chap')

del items[1]

在列表中某个特定的位置前面增加一个数据项:cast.inserst(0, 'chapman')

在列表中删除并返回列表最前面的数据项:pop(0)

列表可以包含混合类型的数据

for 循环处理任意大小的列表

for 目标标识符 in 列表:
    列表处理代码

需要说明的是:列表处理代码成为“组”,目标标识符类似于代码中的任何其他名。迭代处理时,相应的会把列表中的各个数据值分别赋至目标标识符,修改该值并不会改变真正的值

元组:('a', 'b')

列表推导

以下两种等价

clean_mikey = []
for each_t in mikey:
    clean_mikey.append(sanitize(each_t))
clean_mikey = [sanitize(each_t) for each_t in mikey]
列表切片
james[0:3]

函数的使用方法

定义方法:

def 函数名(参数):
    函数代码组

注释代码

如果使用了一个三重引号,而没有将它赋至一个变量,三重引号之间的所有内容都被认为是一个注释

"""This is the 
include a 
you code."""

“#”符号,从这一点直到当前行末尾的所有内容都是注释

a = 1 #blabla

模块的使用方法

查看python模块放在计算的什么位置
import sys
print(sys.path)
安装模块到本地副本中
  1. 首先为模块创建一个文件夹

    创建了文件夹后,将模块文件复制到这个文件夹中。

  2. 在新文件中创建一个名为“setup.py”的文件

    这个文件包含了有关发布的元数据

    # 从python发布工具导入"setup"函数
    from distutils.core import setup
    
    setup( 
            name         = 'nester', 
            version      = '1.0.0', 
        	# 将模块的元数据与setup函数的参数关联
            py_modules   = ['nester'],
            author       = 'hfpython',
            author_email = 'hfpython@headfirstlabs.com',
            url          = 'http://www.headfirstlabs.com',
            description  = 'A simple printer of nested lists',
         )
    
    
  3. 构建一个发布文件

    在上述文件夹中打开一个终端窗口,键入命令python3 setup.py sdist

  4. 将发布安装到python本地副本中

    python setup.py install

    发布工具创建了一个pyc文件,是解释器第一次执行模块代码时,它会读入代码,并转换为一种中间字节码格式,最终所要执行的就是这些字节码,可以让程序运行更快。

  5. 导入模块并使用

    # the first method
    import nester
    cast = ['a', 'b']
    # 如果想指示另外一个模块命名空间的某个函数,就需要用该模块的命名空间名对这个函数的调用加以限定
    nester.print_lol(cast)
    
    # the second method
    from nester import print_lol
    cast = ['a', 'b']
    print_lol(cast)
    

    from module import function形式会把当前命名空间中已定义的名字被导入的名字重写

切换当前工作目录

# 从标准库中导入os
import os
# 当前工作目录是什么
os.getcwd()
# 切换为包含数据文件的文件夹
os.chdir('../HeadFirstPython/chapter3')
os.getcwd()

文件操作

readline():从一个打开的文件读取一行数据

seek():用来将文件“退回”到起始位置

the_file = open('a.txt')
print(the_file.readline(), end='')
print(the_file.readline(), end='')
the_file.seek(0)
for each_line in the_flie:
    print(each_line, end='')
the_file.close()
用with处理文件

不再需要操心关闭打开的文件,因为Python解释器会自动考虑这一点,以下两个代码是等同的,with语句利用了一种名为上下文管理协议的技术

try:
    data = open('its.txt', 'w')
    print("it's..", file=data)
except IOError as err:
    print("File error: " + str(err))
finally:
    if 'data' in locals():
        data.close()
try:
    with open('its.txt', 'w') as data:
        print("it's...", file=data)
except IOError as err:
    print("File error: " + str(err))

python 字符串

split()

str.split((str="", num=string.count(str)):返回一个字符串列表,这会赋至一个目标标识符列表,也叫多重赋值。

str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等

num – 分割次数。默认为 -1, 即分隔所有。

(role, line_spoken) = each_line.split(':')
(role, line_spoken) = each_line.split(':', 1)
find()

找出一个字符串中的子串,如果无法找到,返回-1。如果可以找到,会返回该子串在原字符串中的索引位置

strip()

从字符串中去除不想要的空白符

line_spoken = line_spoken.strip()

strip()方法会创建一个新的字符串,其中去除了原字符串中前面和后面的空白符,这个新字符串再赋至line_spoken,取代之前所指示的数据

upper()

s.upper()

处理异常

python的异常处理机制允许错误出现,但监视它的发生,然后给你一个机会来恢复

try/except/finally机制
try:
    # 代码
except:
    # 错误恢复代码
finally:
    # 无论出现什么错误都必须运行
data = open('a.txt')

for each_line in data:
    try:
        (role, line_spoken) = each_line.split(':', 1)
        print(role, end='')
        print(line_spoken, end='')
	except:
        pass
    
data.close()

特定指定异常

try:
	data = open('a.txt')

    for each_line in data:
        try:
            (role, line_spoken) = each_line.split(':', 1)
            print(role, end='')
            print(line_spoken, end='')
        except ValueError:
            pass
        
    data.close()
except IOError:  
	print('The data file is missing!')

产生一个异常并由except组处理时,python解释器将一个异常对象传入这个except组。

except IOError as err:
    print('File error: ' + str(err))

pickle

用dump保存,用load恢复,必须以二进制访问模式打开这些文件

import pickle
try:
    with open('man_data.txt', 'wb') as man_data, open('other_data.txt') as other_data:
        pickle.dump(man, man_data)
        pickle.dump(other_data, other_data)
except IOError as err:
    print("File Error: " + str(err))
except pickle.PickleError as perr:
    print("Pickling error: " + str(perr))
import pickle
try:
    with open("my_data.pickle", 'wb') as my_data:
        pickle.dump([1, 2, 'three'], my_data)
    with open('mydata.pickle', 'rb') as my_restore_data:
        a_list = pickle.load(my_restore_data)
	print(a_list)
except IOError as err:
    print("File Error" + str(err))

方法串链

data.strip().split(',')
排序

sort()原地排序,是指按指定的顺序排列数据,然后用排序后的数据替换原来的数据。

data.sort()

sorted()复制排序,是指按指定的顺序排列数据,然后返回原数据的一个有序副本。

data2 = sorted(data)

降序排序只需要传入参数reverse=True

集合

创建集合

# set()是工厂函数,会创建一个新的集合
distances = set()
distances = {10.5, 11, 8, 10.6, 10.6}
distances = set(james)

字典

创建字典

clease = {}
palin = dict()

类中定义的每个方法都必须提供self作为第一个参数

类中的每个属性前面都必须有self,从而将数据与其实例关联

class Athlete:
    # self参数可以帮助标识要处理哪个对象实例的数据
    def __init__(self):
        # The code to initialize a "Athlete" object.
class Athlete:
    def __init__(self, value=0):
        self.thing = value
    def how_big(self):
        return(len(self.thing))
d = Athlete("Holy Grail")
d.how_big()
# python执行的代码是
Athlete.__init__(d, "Holy Grail")
Athlete.how_big(d)

继承

class NamedList(list):
    def __init(self, a_name):
        list.__init__([])
        self.name = a_name
johnny = NamedList("John")
johnny.append("Bass Player")
johnny.extend(['Composer', 'Arranger', "Musician"])

python字符串

字符串替换
template = "hello %s , your website  is %s " % ("大CC","http://blog.me115.com")
print(template)
template = "hello {0} , your website  is {1} ".format("大CC","http://blog.me115.com")
print(template)
字符串命名格式化符替换
template = "hello %(name)s ,your name is %(name), your website  is %(message)s" %{"name":"大CC","message":"http://blog.me115.com"}
print(template)
template = "hello {name} , your name is {name}, your website  is {message} ".format(name="大CC",message="http://blog.me115.com")
print(template)
模板方法替换
from string import Template
tempTemplate = Template("Hello $name ,your website is $message")
print(tempTemplate.substitute(name='大CC',message='http://blog.me115.com'))
from string import Template

tempTemplate  = Template("There $a and $b")
d={'a':'apple','b':'banbana'}
print(tempTemplate.substitute(d))

类属性

@property
def top3(self):
    return(sorted(set([self.sanitize(t) for t in self]))[0:3])
print(athletes[athlete_name].top3)

web开发

静态内容:比如一个HTML文件、图像或存储在Web服务器硬盘上的任何其他内容。

动态内容:内容必须动态生成,Web服务器会运行一个程序来生成Web相应。

通用网关接口(Common Gateway Interface,CGI):生成动态内容的过程的标准,符合这个标准的程序通常称为CGI脚本。

MVC设计模式

模型:存储(以及有时处理)Web应用数据的代码

试图:格式化和显示Web应用用户界面的代码

控制器:将Web应用“粘合”在一起并提供业务逻辑的代码

文件夹结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5GVCTDpT-1631013801983)(C:\Users\10933\Desktop\Webapp.png)]

python自己的web服务器
# 导入HTTP服务器和CGI模块
from http.server import HTTPServer, CGIHTTPRequestHandler
# 指定端口
port = 8080
# 创建一个HTTP服务器
httpd = HTTPServer(('', port), CGIHTTPRequestHandler)
# 显示友好消息
print("Starting simple_httpd on port: " + str(httpd.server_port))
# 启动服务器
httpd.serve_forever()
访问表单数据
# 导入cgi库
import cgi
# 获取所有表单数据并放在一个字典中
form_data = cgi.FieldStorage()
athlete_name = form_data['which_athlete'].value
启用CGI跟踪来帮助解决错误

CGI标准指出服务器端程序(你的CGI脚本)生成的任何输出都会由Web服务器捕获并发送到等待的Web浏览器,也就是说会捕获发送到STDOUT(标准输出)的所有内容。

但是CGI脚本上产生一个异常时,Python就把错误消息显示在STDERR(标准错误输出)上。CGI机制会忽略这个输出,因为它想要的只是CGI脚本的标准输出。

但是Python的标准库提供了一个CGI跟踪模块(名为cgitb),启用这个模块时,会在Web浏览器上显示详细的错误信息。

import cgitb
cgitb.enable()

移动开发

安卓手机如何使用Google Play

传送门

数据库

“数据库”:一个或多个表的集合

“表”:一个或多个数据行的集合,每个数据行包括一个或多个行

“SQL”:全名是“结构化查询语言”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nKk9Iyy4-1631013801988)(C:\Users\10933\Desktop\数据库操作流程.png)]

# 导入库
import sqlite3
# 建立与数据库的连接,其中test.sqlite磁盘文件用来保存数据库和数据库表
connection = sqlite3.connect('test.sqlite')
# 创建数据游标
cursor = connection.cursor()
# 执行一些SQL操作
cursor.execute("""SELECT DATE('NOW')""")
# 提交所做的修改,使得修改永久保留
connection.commit()
# 完成时关闭连接
connection.close()
import sqlite3

connection = sqlite3.connect('coachdata.sqlite')

cursor = connection.cursor()
cursor.execute("""CREATE TABLE athletes (
                    id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,
                    name TEXT NOT NULL,
                    dob DATE NOT NULL )""")
cursor.execute("""CREATE TABLE timing_data (
                    athlete_id INTEGER NOT NULL,
                    value TEXT NOT NULL,
                    FOREIGN KEY (athlete_id) REFERENCES athletes)""")

connection.commit()
connection.close()
cursor.execute("INSERT INTO athletes (name, dob) VALUES (?,?)", (name, dob))
cursor.execute("SELECT id from athletes WHERE name=? AND dob=?", (name, dob))
# 返回下一个数据行
cursor.fetchone()
# 返回多个数据行
cursor.fetchmany()
# 返回所有数据
cursor.fetchall()

关闭连接时,游标也会撤销

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值