4.1 函数的定义

函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可

4.2 函数的创建

函数名的命名规则:
1.函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合。不能使用任何的标
点符号;
2.函数名是区分大小写的。
3.函数名不能是保留字。

4.3 函数的参数:

1.必需参数
必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
 def print_info(name,age):
print('Name: %s' %name)
print('Age: %d' %age) print_info('haha',18)

2.关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
 def print_info(name,age):
print('Name: %s' %name)
print('Age: %d' %age) print_info(age=30,name='Amy')

3.默认参数

调用函数时,缺省参数的值如果没有传入,则被认为是默认值。
默认参数一定要跟在其他参数后面!
 def print_info(name,age,sex='male'):
print('Name: %s' %name)
print('Age: %d' %age)
print('Sex:%s' %sex)
print_info('Alex',33)

4.不定长参数

你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。
加了星号(*)的变量名会存放所有未命名的变量参数。而加(**)的变量名会存放命名的变量参数

 1 def add(*args):
2 print(args) # 把所有参数看作一个元组
3 sum=0
4 for i in args:
5 sum+=i
6 print(sum)
7 add(1,2,3,4,5)
8
9 def print_info(sex='male',*args,**kwargs):
10 print(kwargs)
11 for i in kwargs:
12 print('%s:%s'%(i,kwargs[i]))
13 print_info()
14 print_info('alex',23,job='IT')

4.4 函数的返回值:

要想获取函数的执行结果,就可以用return语句把结果返回
 def add(*args):
# print(args) # 把所有参数看作一个元组
sum=0
for i in args:
sum+=i
return sum
a=add(1,2,3,4,5)
print(a)

注意:

1.函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
2.如果未在函数中指定return,那这个函数的返回值为None  
3.return多个对象,解释器会把这多个对象组装成一个元组作为一个一个整体结果输出。  

4.5 函数的作用域

python中的作用域分4种情况:
  • L:local,局部作用域,即函数中定义的变量;
  • E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
  • G:globa,全局变量,就是模块级别定义的变量;
  • B:built-in,系统固定模块里面的变量,比如int, bytearray等。 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。
 x=int(2.9)  # int built-in
g_count=0 # global
def outer():
o_count=1 # enclosing
i_count=8
def inner():
i_count=2 # local
print(i_count)
# print(i_count) # 找不到
inner()
outer() count=10
def outer():
global count # 声明之后不会报错
print(count) # 下面想对count进行修改,所以报错了
count=5
outer() def outer():
count = 10
def inner():
# nonlocal count
count = 20
print(count)
inner()
print(count)
outer()

作用域小结:

(1)变量查找顺序:LEGB,作用域局部>外层作用域>当前模块中的全局>python内置作用域;
(2)只有模块、类及函数才能引入新作用域;
(3)对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量;
(4)内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字。nonlocal是python3新增的关键字,有了这个关键字,就能完美的实现闭包了。 

Python之路【第五篇】函数的更多相关文章

  1. Python之路(第五篇) Python基本数据类型集合、格式化、函数

    一.变量总结 1.1 变量定义 记录某种状态或者数值,并用某个名称代表这个数值或状态. 1.2 变量在内存中的表现形式 Python 中一切皆为对象,数字是对象,列表是对象,函数也是对象,任何东西都是 ...

  2. python之路第五篇之模块和加密算法(进阶篇:续)

    模块 Python中,如果要引用一些内置的函数,该怎么处理呢?在Python中有一个概念叫做模块(module) 简单地说,模块就是一个保存了Python代码的文件. 模块分类: 1)内置模块 2)自 ...

  3. python之路第五篇之递归(进阶篇:续:经典例子剖析)

    递归 在函数内部,可以调用其他函数; 如果一个函数在内部调用自身本身,这个函数就是递归函数. 例如,我们来计算阶乘: n! = 1 x 2 x 3 x ... x n, 用函数f1(n)表示,可以看出 ...

  4. python之路第五篇之装饰器:(进阶篇)

    装饰器: 学前必备知识: def f1(): print "f1" f1() #表示函数执行 f1 #表示函数,指向内存地址 f1 = lambda x: x + 1 f1() # ...

  5. Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy   Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用 ...

  6. python之路(sed,函数,三元运算)

    python之路(sed,函数,三元运算) 一.sed集合 1.set无序,不重复序列 2.创建 se = {11,22,33,33,44} list() #只要是一个类加上()自动执行 list _ ...

  7. 【Python之路】特别篇--property()函数 和 @property 装饰符

    Python中有一个被称为属性函数(property)的小概念,它可以做一些有用的事情.在这篇文章中,我们将看到如何能做以下几点: 将方法转换为只读属性 重新实现一个属性的setter和getter方 ...

  8. Python之路【第九篇】:面向对象进阶

    阅读目录 一. isinstance(obj,cls)和issubclass(sub,super)二. 反射三. __setattr__,__delattr__,__getattr__四. 二次加工标 ...

  9. Python之路【第一篇】python基础

    一.python开发 1.开发: 1)高级语言:python .Java .PHP. C#  Go ruby  c++  ===>字节码 2)低级语言:c .汇编 2.语言之间的对比: 1)py ...

  10. Python之路(第二十篇) subprocess模块

    一.subprocess模块 subprocess英文意思:子进程 那什么是进程呢? (一)关于进程的相关理论基础知识 进程是对正在运行程序的一个抽象,进程的概念起源于操作系统,是操作系统最核心的概念 ...

随机推荐

  1. ELK收集日志到mysql

    场景需求 在使用ELK对日志进行收集的时候,如果需要对数据进行存档,可以考虑使用数据库的方式.为了便于查询,可以同时写一份数据到Elasticsearch 中. 环境准备 CentOS7系统: 192 ...

  2. 20175314 《Java程序设计》第七周学习总结

    20175314 <Java程序设计>第七周学习总结 教材学习内容总结 第八章:常用实用类 String()类代表字符串:Java 程序中的所有字符串字面值(如 "abc&quo ...

  3. 桥接模式和nat模式的区别

    桥接模式:VMware虚拟的系统就想局域网中独立的主机一样(有独立的IP)它可以访问网内任何一台机器 Nat模式:可以通过宿主机访问互联网(宿主机联网,虚拟机就能联网)它不能和本局域网中的其他主机进行 ...

  4. 跨DB Server创建View

    exec sp_configure 'show advanced options',1reconfigureexec sp_configure 'Ad Hoc Distributed Queries' ...

  5. js实现接口隔离

    昨天公司培训了接口隔离,简单说一下 接口隔离:类间的依赖关系应该建立在最小的接口上.接口隔离原则将非常庞大.臃肿的接口拆分成更小具体的接口,这样客户讲会只需要知道他们感兴趣的方法. 接口隔离原则的目的 ...

  6. golang 安装tensorflow

    TF_TYPE="cpu" # Change to "gpu" for GPU support  //设置环境变量   TARGET_DIRECTORY='/u ...

  7. JS判断一个数组中有无重复元素(数字)

    前段时间遇到了这个问题 也百度了很多 不过还是用自己的方法解决了 一个超级简单的方法 简单到令人发指 由于直接写文本太丑了 所以还是截图吧 嘻嘻嘻 假如有一个这样的数组 (这是假如  可能每个人的数据 ...

  8. HTTP协议快速入门指南

    看完下面的文章,回答这几个问题 常用的HTTP方法有哪些 GET方法与POST方法的区别 HTTP请求报文与响应报文格式 常见的HTTP相应状态码 HTTP1.1版本新特性 常见HTTP首部字段 HT ...

  9. 实际操作--create DB link

           我可以查看6D1数据库中的表了:我在哪个表里创建database说明我想访问database中的表~ SELECT * FROM TEST001MX@TESTLINK1   databa ...

  10. python 练习2

    购物订单系统: #!usr/bin/env python # encoding: utf-8 import sys i = 0 inventory_dic = {'Car':1000,'SUV':50 ...