想学python从哪里入手
初学者学习Python需循序渐进,可以从以下内容入手学习:
1.Python基础知识
学习任何一门编程语言都需要学习相关语法知识,Python基础知识的学习主要包括Python解释器执行原理、字符编码、注释、变量、缩进、流程控制、文件操作、数据类型、数据类型内置方法、字符串格式化、运算符、输入输出、三元运算、collections、列表、字典、元组、集合、IO操作、文件增删改查、函数等。
2.函数和常用模块
函数和常用模块的学习内容主要包括装饰器原理和使用、高阶函数、迭代器与生成器、函数式编程、函数递归、二分查找、模块介绍、re正则模块、os\sys模块、subprocess模块、shuti\shelve\itertools模块、hashlib模块、logging日志模块、time\datetime\traceback模块、json\pickle\yam\configparser处理模块、urllib\paramiko模块等。
3.面向对象
Python面向对象知识的学习主要包括面向对象和类介绍、创建类、经典类与新式类、面向对象的三大特性、类的普通成员、字段方法属性、类的高级成员、静态字段、静态方法、静态属性、类方法、MetaClass\AbstractClass、类成员修饰符等。
4.网络编程基础
Python网络编程基础学习内容包括Python模块SocketServer使用和源码剖析、GIL内部机制、线程锁、事件、生产者消费模型、进程的使用、进程间数据共享等。
5.数据库、缓存、队列
Python数据库、缓存、队列学习内容为Python操作redis、Python操作memcache、rabbitMQ消息队列、数据库介绍、mysql数据库安装使用、mysql管理、mysql数据类型、常用mysql命令、创建数据库、外键、增删改查表、权限、事务、索引、Python操作mysql等。
6.Web开发基础
Python之Web开发基础学习内容为HTML基础、CSS基础、JavaScript基础、局部变量和全局变量、集合、数组、字典、函数参数、原型、面向对象、作用域、dom编程、jquery介绍、jquery选择器、jquery属性和CSS操作、jquery文档处理、jquery筛选、jquery事件托管、jquery事件、jquery
ajax、jquery扩展方法、bootstrap使用、EasyUI介绍和使用等。
7.Web框架学习
Python之Web框架学习内容为Web框架本质、socket服务器、基于反射的路由系统、WSGI介绍及原理实现、开发自己的Web框架、MVC和MTV、路由系统、模板、django基础学习与使用、普通路由和动态路由、模板引擎、ORM介绍、Django
ORM增删改查学习、自定义tag、django进阶学习与使用、模型绑定、Form表单验证、Django
ORM进阶学习、ModelForm、自定义Validator等。
什么是函数式编程?
什么是函数式编程思维
试着把函数想象成一个根据一个指定输入产出指定输出的黑盒,就能简化成逻辑电路中的各种门的样子或者是各种流通管道的样子。 然后试想数据通过这些组合起来的管道/门,变成你要的结果。 或者是通过现有的管道或门,构建(抽象)出更复杂/更通用的管道/门。 这就是函数式编程。 任何支持函数的语言都可以进行函数式风格的编程 注意到与命令式风格不同的是没有赋值,这意味着reason 程序的时候每个变量的值是不变的 不用考虑程序变量随着时间的变化 -- 大大降低了程序的复杂性。 既然c/c++(98) 也能进行函数式风格的编程 为什么不认为它是一门函数式语言呢,因为需要容易的进行函数式编程需要以下几个语言特性支持 1. closure 按照上面的三条规则函数式是first class 的 是可以直接传递作为参数的,而因为lambda演算作用于是lexical scope 的,variable capture 意味着语言要支持gc才能更方便的操作。 这意味着像java(8以前), c/c++ 这两门工业界语言函数式编程并不非常适合. 2. 高阶类型推断 因为函数可以作为参数,其类型可以非常复杂 比如下面的函数类型其实非常普遍: val callcc : ((a -> b -> c) -> (a -> c) -> d) -> (a -> c) -> d 如果没有类型推断,其实很难写对或者理解它的语义 3. tail-call 因为函数式风格没有赋值,也就没有for循环, 要实现循环操作 只能通过递归调用, 比如下面简单的例子: let rec even n = if n = 0 then true else if n = 1 then false else odd (n - 1) and odd n = if n = 1 then true else if n = 0 then false else even (n - 1) 这需要编译器保证上面的例子不能有stackoverflow 能提供这样保证的编译器并不多,比如所谓的 "函数式" 语言scala 就不能提供这种保证 也就实际上不是函数式语言. 相比函数式风格我觉得更重要的一个语言特性的时代数数据类型和模式匹配