¿Cómo es el efecto después de completar el curso Python de Programación Fengbian?
1. Introducción a Python
Python es un lenguaje de programación de alto nivel que se utiliza para escribir aplicaciones. Las clasificaciones de lenguajes de programación TIOBE en diciembre de 2015 son las siguientes:
Python ha logrado un fuerte contraataque y creo que a medida que pase el tiempo, las perspectivas futuras del lenguaje Python nacional también serán brillantes.
Python se caracteriza por su elegancia, simplicidad y facilidad de aprendizaje y uso (aunque siento que todavía hay algunos conceptos que son difíciles de entender. La filosofía de Python es usar lo mínimo, lo más simple y lo más comprensible). código para lograr las funciones requeridas. Python es adecuado para desarrollar aplicaciones de red, escritura de scripts, gadgets simples diarios, etc. La desventaja de Python es que es menos eficiente, pero en una gran cantidad de situaciones, la eficiencia no es tan importante o Python no es su cuello de botella en el rendimiento, así que no le importe demasiado. En segundo lugar, la transición de 2.xa 3.x significa que muchos módulos de 3.x todavía carecen de muchos módulos de 2.x, pero también se están mejorando. En segundo lugar, el código fuente no se puede cifrar. Publicar un programa Python en realidad es publicar el código fuente.
2. Puntos básicos de sintaxis
1. Si hay muchos caracteres que deben escaparse en una cadena, pero no desea escribir tantos '\', puede usar r'..' significa que el contenido dentro de '...' no tiene escape.
2.Python puede usar '''...''' para representar contenido de varias líneas, como: 123456
>>>?print('''line1line2line3' '') línea1línea2línea3
3.Las operaciones lógicas de Python and, or, y not corresponden respectivamente a &&, ||, !.
4.Ambas de Python Los números enteros y de coma flotante no tienen rango.
5. Hay dos tipos de división en Python: '/' será un número de punto flotante cuando se divida, y '//' será un número entero cuando se divida, es decir, división de piso.
6. Todo en Python está citado. Cada objeto tiene un contador de referencia (variable de seguimiento interna) para el seguimiento. El valor del recuento de referencia indica cuántas referencias tiene el objeto. Cuando se asigna por primera vez a una variable, el recuento de referencia es 1 y no se realiza ninguna de las siguientes acciones. a partir de entonces, de cualquier manera aumentará el recuento de referencias: 123
Asignación: ? a?=?b se pasa como parámetro de función: func(a) se convierte en un elemento del objeto contenedor: lis?=?: 'valor'}Rastreo (última llamada más reciente):?Archivo?"
Comparación de las ventajas y desventajas de list y dict: 1234567
dict: 1. Rápida velocidad de inserción y búsqueda, independientemente del número de claves 2. Requiere mucha memoria, memoria ¿Desperdicio grave? Lista: 1. La velocidad de inserción y búsqueda es lenta, complejidad O(n), que aumenta con el aumento del número de elementos 2. Uso reducido de memoria
Almacenamiento interno Dict El orden no tiene nada que ver con el orden en que se colocan las claves.
set: set es similar a dict, que equivale a un dict con solo claves y sin valores. Cada clave es diferente. Hay &, | y otras operaciones entre conjuntos correspondientes a conjuntos.
3. Función
1. Una función es un objeto, y el nombre de la función es una referencia al objeto de función correspondiente, por lo que puede asignar el nombre de la función a una variable, que es equivalente a darle a la función un 'alias'.
123
>>> mmm?=?max>>> mmm(1,2,3)3
2. muchos valores", el motivo de las comillas es que los múltiples valores devueltos en realidad se combinan en una tupla, y se devuelve esta tupla.
3. Al definir los parámetros predeterminados, recuerde: los parámetros predeterminados deben apuntar a objetos inmutables. De lo contrario, los resultados de la primera llamada y la segunda llamada serán diferentes porque los parámetros predeterminados de la variable han cambiado después de la llamada.
4. Parámetros variables: el número de parámetros pasados es variable y puede ser 0 o más. Los parámetros variables ensamblarán automáticamente los parámetros que usted pase en una tupla. Agregue un * antes del nombre de la lista o tupla que pasa para indicar que está pasando parámetros variables. El método de escritura habitual es *args.
5. Parámetros de palabras clave: pase 0 o más parámetros que contengan nombres de parámetros y estos parámetros se ensamblarán automáticamente en un dict. El método de escritura habitual es **kw. Por ejemplo, **a significa pasar todos los pares clave-valor en a a kw en forma de parámetros de palabras clave y obtener un dict. Este dict es una copia de a. no se pasará a a.
6. La palabra clave nombrada va seguida de un separador * en la definición de la función, como 12
def?func(a,b,*, c,d):pass
c, d son parámetros de palabras clave con nombre, que pueden limitar los nombres de parámetros que la persona que llama puede pasar y también pueden proporcionar valores predeterminados.
7. Orden de definición de parámetros: parámetros obligatorios, parámetros predeterminados, parámetros variables/parámetros de palabras clave con nombre, parámetros de palabras clave.
8. El formato de la operación de corte es lis[primer subíndice: subíndice final: intervalo. Si no se completa ninguno, es decir, lis[::] representa el contenedor completo
9. Utilice paréntesis () para rodear una generación de lista para crear un generador. El generador guarda el algoritmo de generación. Podemos usar next(g) para obtener el siguiente valor de retorno del generador g. La ventaja de los generadores es que no necesitamos generar todos los elementos de la lista por adelantado, sino generarlos cuando sea necesario, lo que puede ahorrar mucha memoria en algunos casos. El algoritmo también puede ser una función personalizada en lugar de una generación de lista, simplemente incluya la palabra clave de rendimiento en la definición de la función.
10.map() y reduce(): Ambas son funciones de alto orden. map() recibe dos parámetros, uno es una función y el otro es una secuencia iterable. map aplica la función pasada a cada elemento de la secuencia por turno y devuelve el resultado como un nuevo iterador. reduce() es similar a la versión de cálculo acumulativo de map(). Aplica una función a una secuencia, recibe dos parámetros cada vez y continúa el cálculo acumulativo del resultado con el siguiente elemento de la secuencia.
Utilice map y reduce para escribir una función str2float, como convertir la cadena '123.456' en un número de coma flotante 123.456: 123456789101112131415
from?functools?import?reduce?def? str2float(s):def?f1(x,y):retorno?x*10?+?ydef?char2num(s):retorno?{'0':?0,?'1':?1,?'2 ':?2,?'3':?3,?'4':?4,?'5':?5,?'6':?6,?'7':?7,?'8': ?8, ?'9':?9}[s]def?f2(x,y):return?x*0.1?+?ya,b?=?s.split('.')print('a= ',a )print('b=',b)return?reduce(f1,?map(char2num,a))?+?0.1*reduce(f2,?map(char2num,b[::-1])) ?print( 'str2float(\'123.456\') =', str2float('123.456'))
11. La función filter() filtra la secuencia, similar al mapa. () que actúa sobre cada elemento One, dependiendo de si el valor de retorno es Verdadero o Falso, el elemento se descarta o se retiene. La función devuelve un iterador.
12. La función sorted() puede implementar la clasificación, que es similar a la función sort() en la biblioteca C++, pero es más concisa. La sintaxis es sorted(lis,key=func,reverse=. T/F)
La función clave puede implementar reglas de clasificación personalizadas y la inversa indica orden ascendente o descendente.
13. Una función puede devolver una función, pero la función no se ejecuta cuando regresa, así que no haga referencia a ninguna variable que pueda cambiar en la función devuelta, de lo contrario se producirá un error lógico.
14. Decorador: cuando necesita mejorar la función de una función pero no desea modificar la función en sí, puede usar decoradores para agregar funciones dinámicamente en tiempo de ejecución. Las funciones agregadas desinstalan la función decoradora. medio. Si imprime 'iniciar llamada' y 'finalizar llamada' antes y después de la ejecución, puede hacer esto: 12345678910111213141516
import?functools?def?log(func):@functools.wraps(func)?# Para corregir la función Firma, preferiblemente def?wrapper(*args,**kw):print('begin call')f?=?func(*args,**kw)print('end call')return? freturn?wrapper ?@logdef?hah():print('jajajaja')?hah()
123
comenzar llamada jajajajaja finalizar llamada
15. Función parcial: functools.partial(), su función es fijar ciertos parámetros de una función como parámetros de una nueva función, es decir, arreglar los parámetros y devolver una nueva función, facilitando la llamada.
4. Programación orientada a objetos
1. Las variables de instancia de Python se pueden vincular libremente a cualquier atributo
2 para evitar que se acceda a los atributos internos. externamente, agregue dos guiones bajos __ antes del nombre del atributo, para que se convierta en una variable privada. Tenga en cuenta que no se puede acceder a él directamente, de hecho, Python le cambiará el nombre después de agregar guiones bajos dobles, para que aún pueda acceder. esta variable 'privada' así.
3. Para lenguajes estáticos, si se requiere que pase un objeto de tipo clase, entonces el objeto pasado debe ser de tipo clase o su subclase; de lo contrario, no podrá llamar a métodos en la clase, y Python como este Los lenguajes dinámicos tienen un dicho de "escribir pato", es decir, no es necesario pasar el tipo de clase o su subclase, solo para asegurarse de que el objeto pasado tenga el método para utilizarse.
4. Si desea limitar los atributos que se pueden vincular a una instancia, simplemente defina una variable __slots__ al definir la clase, por ejemplo: 12
clase?Estudiante(objeto). ) :__slots__?=?('name','age')
Tenga en cuenta que los atributos restringidos por __slots__ restringen completamente la instancia de clase actual y son consistentes con las subclases** * Lo mismo que definir sus __slots__, lo que significa que las subclases pueden definir sus propios __slots__. Los atributos que las instancias de subclases pueden definir son sus propios __slots__ más los __slots__ de la clase principal, es decir, la unión.
5. El decorador @property puede convertir un método getter en una propiedad. Si el método se llama yo, entonces el decorador @me.setter puede convertir un método setter en una propiedad. Esto mantiene el código más corto y permite la verificación necesaria de los parámetros.
6. A través de la herencia múltiple, una subclase puede tener todas las funciones de varias clases principales.
7. El método __call__ en una clase permite que el objeto de instancia sea llamado directamente como una función, y su función es el proceso definido por el método.
8.ORM (Object Relational Mapping) asigna una fila de una base de datos relacional a un objeto, es decir, una clase corresponde a una tabla. La implementación de ORM requiere modificar la definición de clase mediante metaclase. Las metaclases pueden cambiar el comportamiento de una clase cuando se crea.
5. Depuración
1. Método de depuración de Python:
(1) Impresión directa
(2) Afirmación
(3)pdb
(4)IDE
6. Programación IO
1. Serialización: cambiar variables de memoria a almacenables o el proceso de La transmisión se llama serialización. Python usa el módulo pickle para implementar la serialización. Después de la serialización, el contenido serializado se puede almacenar en el disco o transmitir a través de la red. pickle.dumps() serializa el objeto en bytes, y pickle.loads() puede deserializar el objeto en función de bytes.
2. Aunque pickle es bueno, está diseñado para Python, por lo que para transferir objetos entre diferentes idiomas, es mejor usar xml o json, y el formato de json es una cadena, que es más fácil de usar. leer. Y es más rápido que xml, por lo que es más adecuado para la serialización de objetos. Python tiene un módulo json incorporado y los métodos correspondientes siguen siendo volcados () y cargas ().
3. Sin embargo, de forma predeterminada, algunos objetos no se pueden serializar, por lo que a veces necesitamos personalizar el método de conversión para indicarle a json cómo convertir ciertos tipos de objetos en {} que se pueden serializar en formato json. objeto. El siguiente es un método de conversión: 123456
def?mantodict(std):return?{'name': std.name,'age': std.age,'id': std.id}
7. Procesos y subprocesos
1. Python utiliza el módulo de multiprocesamiento para implementar múltiples procesos.
2. Si desea crear una gran cantidad de procesos secundarios, puede utilizar el grupo de procesos: 1
from?multiprocessing?import?Pool
Un ejemplo es el siguiente: 12345678
....p?=?Pool(4)for?i?in?range(5):p.apply_async(long_time_task, args=(i,))print(' Esperando que todos los subprocesos hayan terminado...')p.close()p.join()print('Todos los subprocesos hayan terminado.')
Para usar el grupo de procesos, necesita crear un nuevo objeto Pool, llamar a join() en el objeto Pool para esperar a que todos los procesos secundarios en el grupo terminen de ejecutarse. Se debe llamar a Close() antes de llamar a join(. ) y no se podrán agregar nuevos procesos secundarios a partir de entonces.
3. Utilice el módulo de subproceso para iniciar y gestionar fácilmente un subproceso y controlar su entrada y salida.
4. La comunicación entre procesos se implementa mediante colas y tuberías.
5. El módulo de subprocesos gestiona los subprocesos. threading.lock() crea un bloqueo de subprocesos para evitar errores causados por el acceso simultáneo a recursos mutuamente excluyentes. El ejemplo es el siguiente: 1234567
lock?=?threading.Lock()...lock.acquire. ()... change(mutex)...lock.release()
6.ThreadLocal puede resolver el problema de los parámetros que se pasan entre funciones en un hilo.
7. El módulo de administradores implementa procesos distribuidos.
8. Expresiones regulares y módulos integrados de uso común
1. El módulo re compila y compara expresiones regulares. Si la expresión necesita coincidir muchas veces, es mejor. compilarlo. Esto ahorra mucho tiempo.
Ejemplo de correo electrónico que coincide con una expresión regular: 12345678910
import?re?hah?=?re.compile('[0-9a-zA-Z]+[\.[0 -9a-zA-Z]+]*\@[0-9a-zA-Z]+\.[a-z]{2,3}')print(hah.match('alguien@gmail.com').group ())print(hah.match('bill.gates@microsoft.com').group())i?=?1 while?i 10:r?=?input('Ingrese su dirección de correo electrónico:') print( hah.match(r).group())i?=?i+1
2. El módulo de fecha y hora procesa la fecha y la hora. Llamamos a la hora en la zona horaria de las 00:00:00 UTC+00:00 del 1 de enero de 1970 la hora de la época, registrada como 0 (la marca de tiempo anterior a 1970 es un número negativo), la hora actual es el número de segundos relativos. a la época, llamada marca de tiempo. Las cadenas y la fecha y hora también se pueden convertir entre sí usando el método strptime() Al convertir una cadena a fecha y hora, se debe establecer un formato de reconocimiento, donde 1
%Y-%m-%d? %H:% M:%S
Indica año, mes, día, hora, minuto y segundo respectivamente.
Para obtener el mes, día de la semana y otras cadenas de fecha y hora, utilice el método strftime(), donde: 1
%a,?%b?%d?%H: %M
p>
Representa el día de la semana, mes, fecha, hora:minuto respectivamente.
Ejemplo: 12345678910
from?datetime?import?datetime?r?=?'2015-11-23 12:01'dt?=?datetime.strptime(r,? '%Y-%m-%d %H:%M')print(dt)?week?=?dt.strftime('%a %b %d, %H:%M')print(week)2015- 11-23?12:01:00lunes 23 de noviembre,?12:01
3. collections es un módulo de colección integrado en Python que proporciona muchas clases de colección útiles.
4.Base64 es un método de codificación de binarios arbitrarios a cadenas de texto. A menudo se utiliza para transmitir pequeñas cantidades de datos binarios en URL, cookies y páginas web.
5. El módulo struct se utiliza para resolver la conversión de bytes y otros tipos de datos binarios.
6.El hashlib de Python proporciona algoritmos hash comunes, como MD5, SHA1, etc. hashlib implementa un inicio de sesión simple: 12345678910111213141516171819202122
import?hashlib?db?=?{'michael':?'e10adc3949ba59abbe56e057f20f883e','bob':?'878ef96e86145580c 3 8c87f0410ad153','alicia':?'99b1c2188db85afee403b1536010c2c9'} ? def?get_md5(ostr):md5?=?hashlib.md5()md5.update(ostr.encode())return?md5.hexdigest()?def?login(usuario, contraseña):r?=?get_md5( contraseña)para?nombre?en?db:if?db[nombre]?==?r:return?Truereturn?False?print(login('bob','abc999'))True
p>
7. El módulo integrado itertools de Python proporciona funciones muy útiles para operar objetos iterables.
8.urllib proporciona una serie de funciones para operar URL. Como GET, POST...
9.PIL (Biblioteca de imágenes Python de Python Imaging Library) es una potente biblioteca estándar de procesamiento de imágenes, potente pero simple y fácil de usar. El nombre actual es Pillow. Pillow se puede instalar de la siguiente manera: 1
pip3 install pillow
Puedes echarle un vistazo desde el programa que genera el código de verificación digital a continuación: Ver código
Efecto:
9. Programación de red y correo electrónico
1. La programación de red es principalmente programación TCP y UDP. Para ver ejemplos, consulte Programación de red Python. Python para sockets TCP y UDP. Programación de Word
2. SMTP es un protocolo para enviar correos electrónicos Python tiene soporte integrado para SMTP y puede enviar correos electrónicos de texto sin formato, correos electrónicos HTML y correos electrónicos con archivos adjuntos. Python admite SMTP con dos módulos: smtplib y correo electrónico. El correo electrónico es responsable de crear correos electrónicos y smtplib es responsable de enviar correos electrónicos. Python tiene un módulo poplib incorporado que implementa el protocolo POP3 y puede usarse directamente para recibir correos electrónicos. Dado que la mayoría de los grandes proveedores de servicios de correo electrónico han adoptado medidas antispam, este sencillo experimento no tuvo éxito y se necesita más investigación hasta que se encuentren situaciones específicas.
3. Python tiene una base de datos sqlite incorporada, y también puede instalarla y conectarse a mysql usted mismo. MySQL es actualmente la base de datos de código abierto más popular y se usa ampliamente en la industria.
10. Desarrollo web y IO asincrónica
1. Interfaz de puerta de enlace del servidor WSGI (Web Server Gateway Interface).
2.Marco de desarrollo web Python:
-Flask: marco web popular
-Django: marco web multiuso
- web.py: un marco web compacto
-Bottle: un marco web similar a Flask
-Tornado: el marco web asincrónico de código abierto de Facebook
3.