热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python系统总结与快速入门(1)

作为一名java程序猿,一直想搞搞python,却从来都是学了忘,忘了学。在网上看了廖雪峰老师的教程,觉得还是很不错的,有兴趣的可以去看看。基于上面的教程,做了个简单的

作为一名java程序猿,一直想搞搞python,却从来都是学了忘,忘了学。
在网上看了廖雪峰老师的教程,觉得还是很不错的,有兴趣的可以去看看。
基于上面的教程,做了个简单的提纲,便于自己回忆。

  • 基础
    • 数据结构
    • 字符编码
    • List与truple
      • list abc
      • truple abc
    • 执行逻辑
    • dict与set
      • dict
      • set
      • 其他
    • 函数
      • 参数
      • 递归与溢出
    • 其他特性
      • 切片
      • 迭代
      • 列表生成
      • 生成器
      • 迭代器
    • 函数式编程
      • 概述
      • 高阶函数
        • mapreduce
        • filter
        • sort
      • 返回函数与懒加载
      • 装饰器
      • 偏函数
  • 模块
    • 作用域
    • 模块安装
    • 模块搜索
  • 面向对象
  • IO
  • 进程
  • 模块
  • Web开发

基础

数据结构

整型
浮点数
字符串
空值 ⇒ none
变量 ⇒ 引用关系
常量 ⇒ 全部大写的变量名表示常量(习惯)
除法 ⇒ 注意 **/** 与 **//** 的区别

字符编码

ASCII ⇒ GB2312 ⇒ Unicode ⇒ UTF-8
ASCII同时也是UTF-8的一种
计算机内存统一使用Unicode,当要存储或传输,转为UTF-8
浏览网页时,服务器将Unicode转为UTF-8传输到客户端
在Python中,字符串以Unicode编码
在编写代码时候,为了避免中文乱码,可以指定为UTF-8

!/usr/bin/env python3
-- coding: utf-8 --

List与truple

list [a,b,c]

可以增删修改元素,append() pop() len()

truple (a,b,c)

一旦初始化则不能修改,但其实不能变的只是结构,具体引用的内容时可变的,换句话说只是元素指向不变

执行逻辑

if...elif..else
while
for..in..
break, continue

dict与set

dict

定义:d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
get(用get,当不存在时不会报错) pop 方法

set

定义:s = set([1, 2, 3])
add remove

其他

 input()获取的是string对象,如果需要处理还需转换

函数

定义函数 def, 空函数时可用pass,输入参数类型检测可以用isinstance(x, (int, float))。返回多个值时 return a,b 实际返回truple的对象

参数

默认参数,注意***默认参数必须指向不可变对象***,因为在函数定义时默认参数的值已经被计算出,如果函数改变了参数的值,在下一次调用时这个值也会是被改变的。
可变参数,def calc(*numbers) 。当需要将list或者truple传入,则在她们前面加\*即可。
关键字参数,def person(name, age, **kw)。kw传入key-value对。
命名关键字参数,如果要限制关键字参数的名字,就可以用命名关键字参数,def person(name, age, *, city, job),\*后面的参数被视为命名关键字参数。
参数组合,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

def f1(a, b, c=0, *args, **kw):
print(‘a =’, a, ‘b =’, b, ‘c =’, c, ‘args =’, args, ‘kw =’, kw)
def f2(a, b, c=0, *, d, **kw):
print(‘a =’, a, ‘b =’, b, ‘c =’, c, ‘d =’, d, ‘kw =’, kw)

递归与溢出

其他特性

切片

迭代

for...in...。dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。用isinstance('abc', Iterable)判断是否可进行迭代。for i, value in enumerate(['A', 'B', 'C']) 可以对下标进行迭代

列表生成

[x * x for x in range(1, 11) if x % 2 == 0]。其实已经比较类似java8的特性了。、

生成器

用来处理无限循环的类型
1. 把列表生成的[]换成(), g = (x * x for x in range(10)), next(g)或者for n in g
2. 函数return改为yield

迭代器

注意使用迭代器是不知道迭代对象的长度,只能通过不断next来寻找。

函数式编程

(这里已经非常类似java8了)

概述

变量可以指向函数,通过变量名即可调用函数。
函数名同时也是变量,可以作为参数传递。
函数可以接受函数为变量。
def add(x, y, f):
return f(x) + f(y)

f=abs #求绝对值

高阶函数

lambda表达式,匿名函数,下面例子多为lambda表达式。

map/reduce

from functools import reduce
list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
reduce(add, [1, 3, 5, 7, 9])

###########

def char2num(s):
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]

def str2int(s):
return reduce(lambda x, y: x * 10 + y, map(char2num, s))

filter

    print(list(filter(lambda x:x>3, [1,2,3,4,5])))

sort

    sorted([36, 5, -12, 9, -21], key=abs)
sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)

返回函数与懒加载

函数不需要立即求值,需要在后面的计算中进行求值,所以函数的返回值是一个函数。换言之,函数调用两次才出结果
    def lazy_sum(*args):
def sum():
ax = 0
for n in args:
ax = ax + n
return ax
return sum

f = lazy_sum(1, 3, 5, 7, 9) # 此时返回一个函数
f() # 此时计算最终结果
当返回函数包含内部变量时,返回函数的内部变量还会被新函数所使用。
返回函数时,计算并未执行,而是调用到最终函数才会执行。

装饰器

这部分我觉得还是挺好玩的。wrapper函数是封装函数。
封装函数需要被定义为wrapper函数。
wrapper的参数定义应该是(*args, **kw),因此,wrapper()函数可以接受任意参数的调用。
如果需要装饰器decorator本身有参数传入,则需要编写一个返回decorator的高阶函数。
    #函数添加内容
def showName(func):
def wrapper():
print("Before function exec: ")
return func()
return wrapper

# 通过注解使用装饰起
@showName
def func():
print("Function execution")

#decorator传入参数
def log(text):
def decorator(func):
print("This is "+ text + "log \nFunction is:" +func.__name__)
def wrapper():
print("This is wrapper")
return func();
return wrapper
return decorator

@log('rudi')
def fun():
print("Function execution")

fun()

偏函数

functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单
 import functools
# 传函数,给参数
int2 = functools.partial(int, base=2)

模块

作用域

类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__就是特殊变量,hello模块定义的文档注释也可以用特殊变量__doc__访问,我们自己的变量一般不要用这种变量名;

类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等;

也就是说__XXX的函数是private函数。
# 通过调用greeting函数调用内部private函数
def _private_1(name):
return 'Hello, %s' % name

def _private_2(name):
return 'Hi, %s' % name

def greeting(name):
if len(name) > 3:
return _private_1(name)
else:
return _private_2(name)

模块安装

pip install Pillow
其他常用的第三方库还有MySQL的驱动:mysql-connector-python
用于科学计算的NumPy库:numpy
用于生成文本的模板工具Jinja2

模块搜索

1. 一是直接修改sys.path,添加要搜索的目录:
import sys
sys.path.append('/Users/michael/my_py_scripts')
2. 设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。

面向对象

IO

进程

模块

Web开发

推荐阅读
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
  • 深入理解云计算与大数据技术
    本文详细探讨了云计算与大数据技术的关键知识点,包括大数据处理平台、社会网络大数据、城市大数据、工业大数据、教育大数据、数据开放与共享的应用,以及搜索引擎与Web挖掘、推荐技术的研究及应用。文章还涵盖了云计算的基础概念、特点和服务类型分类。 ... [详细]
  • Python技巧:利用Cookie实现自动登录绕过验证码
    本文详细介绍了如何通过Python和Selenium库利用浏览器Cookie实现自动登录,从而绕过验证码验证。文章提供了具体的操作步骤,并附有代码示例,帮助读者理解和实践。 ... [详细]
  • Python + Pytest 接口自动化测试中 Token 关联登录的实现方法
    本文将深入探讨 Python 和 Pytest 在接口自动化测试中如何实现 Token 关联登录,内容详尽、逻辑清晰,旨在帮助读者掌握这一关键技能。 ... [详细]
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 配置PHPStudy环境并使用DVWA进行Web安全测试
    本文详细介绍了如何在PHPStudy环境下配置DVWA( Damn Vulnerable Web Application ),并利用该平台进行SQL注入和XSS攻击的练习。通过此过程,读者可以熟悉常见的Web漏洞及其利用方法。 ... [详细]
  • Python3 中使用 lxml 模块解析 XPath 数据详解
    XPath 是一种用于在 XML 文档中查找信息的路径语言,同样适用于 HTML 文件的搜索。本文将详细介绍如何利用 Python 的 lxml 模块通过 XPath 技术高效地解析和抓取网页数据。 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 初探Hadoop:第一章概览
    本文深入探讨了《Hadoop》第一章的内容,重点介绍了Hadoop的基本概念及其如何解决大数据处理中的关键挑战。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 1.执行sqlsever存储过程,消息:SQLServer阻止了对组件“AdHocDistributedQueries”的STATEMENT“OpenRowsetOpenDatas ... [详细]
  • PostgreSQL 最新动态 —— 2022年4月6日
    了解 PostgreSQL 社区的最新进展和技术分享 ... [详细]
  • This post discusses an issue encountered while using the @name annotation in documentation generation, specifically regarding nested class processing and unexpected output. ... [详细]
author-avatar
临汾专业家具安装
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有