热门标签 | 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开发

推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
  • 开发笔记:大数据之Hadoop(MapReduce):GroupingComparator分组案例实操
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了大数据之Hadoop(MapReduce):GroupingComparator分组案例实操相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • MapReduce工作流程最详细解释
    MapReduce是我们再进行离线大数据处理的时候经常要使用的计算模型,MapReduce的计算过程被封装的很好,我们只用使用Map和Reduce函数,所以对其整体的计算过程不是太 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 《Spark核心技术与高级应用》——1.2节Spark的重要扩展
    本节书摘来自华章社区《Spark核心技术与高级应用》一书中的第1章,第1.2节Spark的重要扩展,作者于俊向海代其锋马海平,更多章节内容可以访问云栖社区“华章社区”公众号查看1. ... [详细]
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社区 版权所有