闭包python 菜鸟教程_《菜鸟教程》之基础教程

本文详细介绍了Python的基础知识,包括编码格式、标识符、数据类型和代码块语句。深入探讨了数字类型、循环语句、作用域规则、迭代器、生成器以及函数的特性。此外,还讲解了Python的高级主题,如网络编程中的Socket接口、多线程概念,以及如何使用Python进行MySQL数据库编程。
摘要由CSDN通过智能技术生成

10bd07c31be3107afae395987bd3c591.png

一、基础教程

2.1 基本知识点

python默认的编码格式是ASCII格式;需要使用# -*- coding: UTF-8才能读取中文。

python能进行交互式编程,脚本式编程。

python标识符由字母、数字、下划线组成。

以单划线开头_foo表示不能直接访问的类属性,需要通过类提供的接口进行访问,不能用from xxx import *而导入。

以双下划线开头的 __foo 代表类的私有成员。

以双下划线开头和结尾的 foo 代表 Python 里特殊方法专用的标识,如 init() 代表类的构造函数。

python中所有代码块语句必须严格包含相同的缩进空白数量。

python3中有6个标准的数据类型:数字Number,字符串String,列表List,元组Tuple,集合Set,字典Dictionary。

其中不可变数据3个:数字Number,字符串String,元组Tuple。

可变数据3个:列表List,字典Dictionary,集合Set。

python3中数字Number有四种类型:整数int,布尔型bool,浮点数float,复数complex(1+2j)。

python中的循环语句有for和while,没有do...while。

python中pass语句是空语句,是为了保持程序结构的完整性。pass不做任何事情,一般用做占位语句。

2.2 重要知识点

---------first---------

迭代器:方法iter()和next(),迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会退后。把一个类作为一个迭代器使用需要在类中实现两个方法 iter() 与 next() 。StopIteration 异常用于标识迭代的完成.

生成器(generator):使用了yield的函数被称为生成器。跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。调用一个生成器函数,返回的是一个迭代器。

函数:能提高应用的模块性,和代码的重复利用率。def area(width, height):

在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。例如a=5后再令a=10,实际上是新生成了一个int值对象,再让a指向它,而5被丢弃。而la=[1,2,3,4]后再赋值la[2]=5,则是剪list la的第三个元素值更改,本身la对象没有动,只是其内部的一部分值被修改了。

参数传递:

不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响。

python的作用域:

局部作用域L:Local

闭包函数外的函数中E:Enclosing

全局作用域G:Global

内置作用域B:Built-in

变量查找的规则是L->E->G->B;即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。

-------second-------

python的数据结构:

列表[,]:可变,列表推导式[3*x for x in [2,4,6] ]提供了从序列创建列表的简单途径,列表嵌套。

列表作为堆栈使用:后进先出。append()方法可以把一个元素添加到堆栈顶。用不指定索引的pop()方法可以把一个元素从堆栈顶释放出来。

列表作为队列使用:先入先出,效率不高。from collections import deque,然后append()方法加入队列,popleft()方法弹出队列。

元组(,):由若干个逗号分隔的值组成。

集合{,}:是一个无序不重复元素的集。

字典{}:可以看成无序的键=>值对集合。字典以关键字为索引,关键字可以是任意不可变类型,通常用字符串或数值。

模块:是一个包含所有你定义的函数和变量的文件,其后缀名是.py。其可以被别的程序引入,以使用该模块中的函数等功能。

import语句:当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表。

__name__属性:由于一个模块被另一个程序第一次引用时,其主程序将运行。如果想在模块被引入时,模块中的某一程序块不执行。我们可以使用__name__属性来使该程序仅在该模块自身运行时执行。例如

if __name__ == '__main__':

print('程序自身在运行')

else:

print(‘我来自另一模块’)

标准模块:直接被构建在解析器中,直接import导入即可。例如:import sys

包:是一种管理python模块命名空间的形式,采用“点模块名称”。例如,一个模块的名称是A.B,那么他表示一个包A中的子模块。在导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。目录只有包含一个叫做 init.py 的文件才会被认作是一个包。用户可以每次只导入一个包里面的特定模块,例如:import sklean.model_selection,其下必须有一个__init__.py函数。

从一个包中导入*,即Python 会进入文件系统,找到这个包里面所有的子模块。

二、高级教程

2.1 网络编程:

python提供了两个级别访问的网络服务:

低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。

高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。

Socket:又称套接字,应用程序通常通过“套接字”向网络发出请求或者应答网络请求,使主机或者一台计算机上的进程间可以通讯。socket实现进程间通信。python中语法如下:

socket.socket([family[, type[, proto]]])

- family:套接字家族可以使AF_UNIX或者AF_INET

- type:套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM

- protocol:协议一般默认为0.

例如:socket.socket([AF_UNIX[, SOCK_STREAM[, 0]]])

(1)服务器:文件名——server.py

服务端套接字:

s.bind()绑定地址。s.listen(5)开始TCP监听,最大连接数为5。s.accept()被动接受TCP客户端连接,等待连接的到来。

#!/usr/bin/python3

import socket

import sys

#(1)创建socket对象

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#(2)获取本地主机名

host = socket.gethostname()

#(3)设置端口号

port = 9999

#(4)绑定端口号

serversocket.bind((host, port))

#(5)设置最大连接数,超过后排队

serversocket.listen(5)

while True:

# 建立客户端连接

clientsocket, addr = serversocket.accept()

print("连接地址:%s" % str(addr))

message = "欢迎访问博客!" + "\r\n"

clientsocket.send(message.encode('utf-8'))

clientsocket.close()

(2)客户端:文件名——client.py

客户端套接字:

s.connect()主动初始化TCP服务器连接,返回的address一般是元组(hostname,port)。s.connect_ex()是connect的扩展版本,出错时返回出错码,而不是抛出异常。

#!/usr/bin/python3

import socket

import sys

#(1)创建socket对象

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#(2)获取本地主机名

host = socket.gethostname()

#(3)设置端口号

port = 9999

#(4)连接服务,指定主机和端口

s.connect((host, port))

#(5)接收小于1024字节的数据

message = s.recv(1024)

s.close()

print(message.decode('utf-8'))

公共用途的套接字:

s.recv()接收TCP数据,数据以字符串形式返回。s.send()发送TCP数据,将string中的数据发送到连接的套接字。s.close()关闭套接字。

python Internet模块:

协议功能用处端口号Python 模块

HTTP网页访问80httplib, urllib, xmlrpclib

NNTP阅读和张贴新闻文章,俗称为"帖子"119nntplib

FTP文件传输20ftplib, urllib

SMTP发送邮件25smtplib

POP3接收邮件110poplib

IMAP4获取邮件143imaplib

Telnet命令行23telnetlib

Gopher信息查找70gopherlib, urllib

2.2 多线程:

多线程类似于同时执行多个不同程序,多线程运行优点:

使用线程可以把占据长时间的程序中的任务放到后台去处理。

程序的运行速度可能加快。

2.3 python3 MySQL编程:

pyhon可以使用mysql-connector来连接使用MySQL,mysql-connector是MySQL官方提供的驱动器。

(1)创建数据库连接

import mysql.connector

mydb = mysql.connector.connect(

host="localhost", # 数据库主机地址

user="yourusername", # 数据库用户名

passwd="yourpassword" # 数据库密码

)

print(mydb)

(2)创建数据库

mycursor = mydb.cursor()

mycursor.execute("CREATE DATABASE runoob_db")

(3)创建数据表

mycursor = mydb.cursor()

mycursor.execute("CREATE TABLE sites (name VARCHAR(255), url VARCHAR(255))")

(4)主键设置

mycursor = mydb.cursor()

mycursor.execute("ALTER TABLE sites ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY")

(5)插入数据

mycursor = mydb.cursor()

sql = "INSERT INTO sites (name, url)

VALUES (%s, %s)"

val = ("RUNOOB", "https://www.runoob.com")

mycursor.execute(sql, val)mydb.commit() # 数据表内容有更新,必须使用到该语句print(mycursor.rowcount, "记录插入成功。")

select语句:查询数据使用SELECT语句;

where语句:读取指定条件的数据,可以使用where语句;

排序:查询结果排序可以使用 ORDER BY 语句,默认的排序方式为升序,关键字为 ASC,如果要设置降序排序,可以设置关键字 DESC。

delete删除记录:删除记录使用“DELETE FROM”语句。

update语句:数据表更新使用“UPDATE”语句。

drop删除表:删除表使用“DROP TABLE”语句。

2.4 python调用C语言

python中的ctypes模块提供了和C语言兼容的数据类型和函数来加载dll文件,因此调用时不需对源文件做任何修改。流程如下:

首先将C代码编译成动态.so文件(windows下为dll文件);

然后导入ctypes库from ctypes import *;

最后在python中直接调用adder = CDLL('./adder.so'),并且可以用adder对象调用动态文件中的函数。

这个过程中,C文件是自解释的,python通过导入模块加载库文件,在函数调用时,python内部会对C函数进行调用。

参考:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值