Python成长笔记 - 基础篇 (四)函数

1、面向对象:类(class)

2、面向过程:过程(def)

3、函数式编程:函数(def)----python

1、函数:http://egon09.blog.51cto.com/9161406/1834777

编程语言中函数定义:函数是逻辑结构化和过程化的一种编程方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
python中函数定义方法:

def test(x):
"The function definitions"
x+=1
return x

def:定义函数的关键字
test:函数名
():内可定义形参
"":文档描述(非必要,但是强烈建议为你的函数添加描述信息)
x+=1:泛指代码块或程序处理逻辑
return:定义返回值

为什么要使用函数:

1、代码的重复利用

2、可扩展

3、保持一致性

return为什么要有返回值:验证函数执行的结果

总结:

返回值数=0:返回None

返回值数=1:返回object

返回值数>1:返回tuple

2、全局与局部变量

在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。

全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

当全局变量与局部变量同名时:

在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

#局部变量只在函数中生生效,该函数就是局部变量的作用域

shool = "oldboy"

def change_name(name):

global shool #不要用

print("before change: %s in shool %s"% (name,shool))

name = "Alex Li"

shool = "oldboy111"

print("after change: %s in shool %s "% (name,shool))

name ="alex"

change_name(name)

print(name)

print(shool)

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数

def calc(n):

print(n)

if int(n)>0:

return calc(int(n/2)) #最大递归999层

print(n)

n=10

calc(n)

print(n)

递归特性:

1. 必须有一个明确的结束条件

2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

5、函数式编程

函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的

6、高阶函数

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

时间: 2024-10-05 12:15:05

Python成长笔记 - 基础篇 (四)函数的相关文章

Python成长笔记 - 基础篇 (十四)--堡垒机

堡垒机架构 堡垒机的主要作用权限控制和用户行为审计,堡垒机就像一个城堡的大门,城堡里的所有建筑就是你不同的业务系统 , 每个想进入城堡的人都必须经过城堡大门并经过大门守卫的授权,每个进入城堡的人必须且只能严格按守卫的分配进入指定的建筑,且每个建筑物还有自己的权限访问控制,不同级别的人可以到建筑物里不同楼层的访问级别也是不一样的.还有就是,每个进入城堡的人的所有行为和足迹都会被严格的监控和纪录下来,一旦发生犯罪事件,城堡管理人员就可以通过这些监控纪录来追踪责任人. 堡垒要想成功完全记到他的作用,只

Python成长笔记 - 基础篇 (八)

socket编程 应用层: 表示层: 会话层: 传输层: 网络层: ip地址 数据链路层: MAC地址 物理层: 协议类型: TCP/IP协议:三次握手,四次断开 2. Socket 参数介绍 socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)  必会 Create a new socket using the given address family, socket type and protocol nu

Python成长笔记 - 基础篇 (七)python面向对象

三大特性: 1.封装:在类中对数据赋值.内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法 2.继承:一个类可以派生出子类,在父类中定义的属性.方法会自动被子类继承 # class People:#经典类 class People(object):#新式类 def __init__(self,,age): self.name = self.age = age def eat(self): print('%s is eating' %self.name) def wo

Python成长笔记 - 基础篇 (二)python基本语法

Python的设计目标之一是让代码具备高度的可阅读性.它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观.它不像其他的静态语言如C.Pascal那样需要重复书写声明语句,也不像它们的语法那样经常有特殊情况和惊喜. Python缩进 Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯.并且Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或者某种关键字.增加缩进表示语句块的开始,而减少缩进则表示语

Python成长笔记 - 基础篇 (十一)

回顾: 线程:资源的集合:内存共享,两个或多个线程同时修改一份数据时,造成结果可能不正确,必须加锁 进程:运行的最小单元 守护进程:在start之前设置setDemo() 队列queue:作用解耦,使程序之间是实现松耦合,提高处理效率 FIFO:先进先出 LIFO:后进先出 队列中的数据使用完就没了(消费者生产者模型) 事件event:(红绿灯模型) python中的多线程是一个假象,我们是利用它上下文切换 io操作不占用CPU,计算操作占用CPU, python中大量的计算反而会使程序变得更慢

Python成长笔记 - 基础篇 (十)

本节内容 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 开发一个线程池 进程 语法 进程间通讯 进程池 ssh ssh_sftp SSH密钥 RSH -非对称密钥验证 公钥:public key 私钥: privat key 10.0.0.31 ----连接----> 10.0.0.41 私钥 公钥 10.0.0.31 生成密钥对ssh-keyg

Python成长笔记 - 基础篇 (三)python列表元组、字典、集合

本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码   一.列表和元组的操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 names = ["Wang","HouZi1","NiuNiu","ZhouYi","HouZi2",[1,2]] 可以通过列表角标的方式去获得list中的值 print(names)print(nam

Python成长笔记 - 基础篇 (九)

创建一个socketserver 至少分以下几步: First, you must create a request handler class by subclassing the BaseRequestHandlerclass and overriding its handle() method; this method will process incoming requests.  Second, you must instantiate one of the server classe

Python成长笔记 - 基础篇 (十二)----RabbitMQ、Redis 、线程queue

本节内容: 1.RabbitMQ 消息队列 2.Redis 3.Mysql PY 中的线程queue(threading Queue):用于多个线程之间进行数据交换,不能在进程间进行通信 进程queue:父进程与子进程中的交互,或者是同属于同一个父进程下多个子进程进行交互:两个不相关的进程间交互不能用进程queue RabbitMQ --信息流是单向的 两个完全独立的程序进行交互:1.进程间建立socket 2.一个写入disk,另一个调用 3.使用中间进程,RabbitMQ等 Remote p