函数是python 为了代码最大程度的重用和最小代码冗余而提供的最基本的程序结构。使用它我们可以将复杂的系统分解为可管理的部件。

函数相关语句

def...          创建一个对象并将其赋值给某一个对象

return        将一个结果对象发送给调用者

global        声明了一个模块级的变量并赋值

nonlocal    声明了将要赋值的一个封闭的函数变量

yield          向调用者发回一个结果对象,但是记住它离开的地方

lambda      创建一个对象,将其结果返回

函数定义和调用

实例一:

 def times(x,y):     #函数定义
return x*y #函数主体 #函数调用
a = times(3,4)
b = times('hello',4)
print(a,b) #12 hellohellohellohello

实例二:求两个集合的交集

 def intersect(seq1,seq2):
res = []
for i in seq1:
for i in seq2:
res.append(i)
return res #函数调用 s1 = 'admin'
s2 = 'awsemis'
print(intersect(s1,s2)) #['a','m','i']

作用域 

  在任何情况下,一个变量的作用域(它所使用的地方)总是由在代码中被赋值的地方所决定,并且与函数调用完全没有关系。实际上,变量可以在3个不同的地方分配,分别对应3种不同的作用域:

1. 如果一个变量在def内赋值,它被定位在这个函数内。

2. 如果一个变量在一个嵌套的def中赋值,对于嵌套的函数来说,它是非本地的。

3. 如果在def之外赋值,它就是整个文件全局的。

a = 99     #a为全局变量
def num_a():
a=88 # a为本地变量(只在def语句内是可见的)
return a
print(a) #
print(num_a()) #
  尽管这两个变量名都是 a,但是它们的作用域可以把它们区别开来。实际上,函数的作用域有助于防止程序之中变量名的冲突域,并且有助于函数成为更加独立的程序单元。
作用于法则:

函数定义了本地作用域,而模块定义的是全局作用域。这两个作用域有如下的关系

1.内嵌的模块是全局作用域。

2.全局作用域的作用范围仅限于单个文件

3.每次对函数的调用都创建了一个新的本地作用域。

4.赋值的变量名除非声明为全局变量或非本地变量,否则均为本地变量

5.所有其他的变量名都可以归纳为本地、全局或者内置的。

python 的作用域的关系如下:

  变量名引用分为三个作用域进行查找:首先是本地(L),之后是函数内(E)(如果有的话),之后全局(G),最后是内置(B)。

实例:
#Global scope  全局作用域
x = 99 # x和func为全局作用域(global scope)
def func(y):
#Local scope 本地作用域
z = x + y #y和z 为本地作用域(local scope)
return z
print(func(1)) #

global语句

它是一个命名空间的声明。它告诉python函数打算生成一个或多个全局变量名。

全局变量名总结:

1. 全局变量是位于模块文件内部的顶层的变量名。

2. 全局变量如果是在函数内被赋值的话,必须经过声明。

3. 全局变量名在函数的内部不经过声明也可以被引用。

x = 88      # x 为global
def func():
global x #声明后,函数外部的变量x就会被改变。不加这个声明是不能改变外部变量的。
x = 99
func()
print(x) #

嵌套作用域实例

x = 99      #global 全局作用域
def f1():
x=88 # enclosing 函数内作用域
def f2():
print(x) #先找本地,本地找不到找函数内,遵循LEGB法则
f2() #在函数里面调用函数f2
f1() #88 #调用f1函数

nonlocal语句

  nonlocal和global一样,声明了将要在一个嵌套的作用域中修改的名称。

  区别之处:nonlocal应用于一个嵌套的函数的作用域中的一个名称,而不是所有def之外的全局模块作用域;而且在声明nonlocal名称的时候,它必须已经存在于该嵌套函数的作用域中。

参数

  必须参数

  关键字参数

  默认参数

  不定长参数(*)

  不定长参数(**)

def info(name,age,sex='男'): #sex = '男'  为默认参数(默认参数必须放后面)
print('Name:%s\nAge:%d\nSex:%s'%(name,age,sex)) '''必须参数'''
info('xp',26) '''关键字参数'''
info(age = 26,name = 'xp') info('pp',26,sex='女') '''不定长参数'''
def add(*args):
print('对元素进行求和:',args) # 传进参数打印结果是元组类型
sum=0
for i in args:
sum += i
print('求和结果:',sum) add(1,2,3) '''不定长参数二'''
def info(*args,**kwargs):
# print(args)
print(kwargs) # 打印出 字典 格式
for i in kwargs:
print('%s:%s'%(i,kwargs[i])) info('xp', 26,sex = '男',job = 'IT')
info()

  位置关系

结论:

  *args参数放在左边,**kwargs参数放在右边

 默认参数在左边,*args参数放在左边,**kwargs参数放在右边

未完待续。。。。。


Python 学习第三部分函数——第一章函数基础的更多相关文章

  1. python学习第三天第一部分

    字典 1.字典的定义和规则: 定义:{key1:value1,key2:value2} key 的定义规则:1.必须是不可变的(数字.字符串.元组):2.必须是唯一的, value的定义规则:任意类型 ...

  2. 《python学习手册》第32章 异常基础

    发生异常与默认的异常处理   当发生异常的时候,我们代码没有刻意捕获这个异常,所以它会一直向上返回到程序顶层,并启用默认的异常处理器:打印标准出错信息.而且会终止程序.   执行下面程序 def fu ...

  3. web前端学习python之第一章_基础语法(二)

    web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...

  4. web前端学习python之第一章_基础语法(一)

    web前端学习python之第一章_基础语法(一) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...

  5. javascript进阶课程--第一章--函数

    javascript进阶课程--第一章--函数 学习要点 了解内存管理 掌握全局函数的使用 知识点 基本类型和引用类型 基本类型值有:undefined,NUll,Boolean,Number和Str ...

  6. python学习第三次记录

    python学习第三次记录 python中常用的数据类型: 整数(int) ,字符串(str),布尔值(bool),列表(list),元组(tuple),字典(dict),集合(set). int.数 ...

  7. python第一章计算机基础

    第一章 计算机基础 1.1 硬件 计算机基本的硬件由:CPU / 内存 / 主板 / 硬盘 / 网卡 / 显卡 / 显示器 等组成,只有硬件但硬件之间无法进行交流和通信. 1.2 操作系统 操作系统用 ...

  8. Python 学习 第三天 课后总结:

    PYTHON学习第三天课后总结: 1,注释:就是对代码起到说明注解的作用.   注释分为单行注释与多行注释.  单行注释:只注释一行代码在需要注释的所在行的行首使用#号来注释此行,注意#与代码之间需要 ...

  9. Python学习-第三天-面向对象编程基础

    Python学习-第三天-面向对象编程基础 类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例.这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的 ...

随机推荐

  1. 美食类Web原型制作分享-Taste

    Taste是国外知名的美食类网站,为人们提供丰富的美食菜单,帮助人们更好的享受美食带来的快乐.网站采用图文结合的排版方式,有固定顶部导航栏的交互功能等. 本原型由国产原型工具Mockplus和团队协作 ...

  2. jquery单行文字上下循环滚动

    html代码: <div class="box"> <div class="t_news"> <b>已关联奖励账号.昵称:& ...

  3. 在ugui上显示3d物体

    1.接下来,使Cube的Layer和背景一样为UI层, 2.在将我们的主相机culling Mask改为UI,如果你还想渲染其他层的物体,可以根据需要该为需要的层,或者直接改为Everyting 3. ...

  4. Python中逗号的妙用

    闲着没事打算用Python刷一遍pat,输出过程中遇到了一个这样的问题: 题目1002题目要求 在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格, 但是P ...

  5. poj-3667(线段树区间合并)

    题目链接:传送门 参考文章:传送门 思路:线段树区间合并问题,每次查询到满足线段树的区间最左值,然后更新线段树. #include<iostream> #include<cstdio ...

  6. telegraph.conf配置

    原文:http://www.cnblogs.com/smail-bao/p/7002361.html 1.操作系统基础监控指标配置标准 基础监控使用通用的全局配置文件telegraf.conf,以下只 ...

  7. C++STL 函数对象和谓词

    函数对象:重载函数调用操作符的类,其对象常称为函数对象. 函数对象属于类对象,能突破函数概念,保持类的状态 谓词: 一元函数对象:函数参数1个: 二元函数对象:函数参数2个: 一元谓词 函数参数1个, ...

  8. mysql重装之后 复制data

    (哇,编程小白的第一篇博客丫,激动) Q one:mysql需要重装,数据该怎么办. 方法一:数据表最好是导出成.sql文件,这样才比较安全. 方法二:直接copy了data文件:在mysql安装盘下 ...

  9. arguments[0]()的详解

    var length = 10; function fn(){ console.log(this.length); } var obj = { length:5, method:function(fn ...

  10. 微信小程序之下拉加载和上拉刷新

    微信小程序下拉加载和上拉刷新两种实现方法 方法一:onPullDownRefresh和onReachBottom方法实现小程序下拉加载和上拉刷新 首先要在json文件里设置window属性       ...