今日内容

  1.参数

  2.作用域

  3.函数嵌套

内容回顾  

  •   线上操作系统:centos
  •   py2和py3的区别?
  •   每种数据类型,列举你了解的方法。
  •   3 or 9 and 8
  •   字符串的反转
  •   is 和 == 的区别?
  •   v1 = (1) / v2 = 1
  •   深浅拷贝
  •   文件操作,大文件如何读取内容 [ 50G的日志文件

2.1知识点回顾

  a.函数基本结果  

def func(name,age,email):
# 函数体(保持缩进一致)  
a=123
print(a)
return 1111
b=456
print(b)
result = func(1,2,3) #输出的结果为:123
注意:函数默认返回值为:None
b.参数
def func(n1,n2):
print(n1, n2)
func(1, 2) #输出结果为:1,2
func(1, [11, 22, 3]) #输出的结果为:1,[11, 22, 3]
func({'k1': 'k'}, [11, 22, 3])#输出的结果为:{'k1': 'k'}, [11, 22, 3]
注意:严格按照顺序参数:位置方式传参
实际参数可以是任意类型;

c.返回值
函数返回值没有默认值,默认返回:None
函数内部执行过程中遇到return,就中止;
def func()
return "完成" # 函数每次执行到此,就返回;所以下面代码永远不执行。  
for i in range(10):
print(i)
func()
def func2():
for i in range(10):
print(i)
return "完成"
print(666)
func2() #输出结果为:0
d.return可以返回任意类型
def func():
return (1,2,3)
v = func()
print(v) #返回的结果为:(1,2,3) def func():
return 5,8,"alex"
v = func()
print(v) #输出的结果为(5,8,"alex")
#注意:return 可以返回任意类型,特殊情况:可以返回元组

2.2参数

  a.基本参数知识 任意个数/任意类型

  b.位置传参(调用参数并传入参数) 

  c.关键字传参(注意位置传参与关键字传参可以混合使用,位置参数>关键字参数,其中位置参数个数+关键字参数个数 = 总参数个数) 

  d.自定义参数(参数可以赋有默认值)

  示例如下: 

def func(a1,a2,a3=9,a4=10):
print(a1,a2,a3,a4) func(11,22)
func(11,22,10)
func(11,22,10,100)
func(11,22,10,a4=100)
func(11,22,a3=10,a4=100)
func(11,a2=22,a3=10,a4=100)
func(a1=11,a2=22,a3=10,a4=100) e.万能参数(打散)
  *args:可以接收任意个的位置参数,并将参数转换为元组。(只能使用位置参数)
  调用参数无*
  调用参数有*
  示例如下: 
def func(*args):
print(args) func(1,2,3,4) #输出结果为:(1,2,3,4)
func((1,2,3,4)) #输出的结果为:((1,2,3,4))
func(*(1,2,3,4)) #输出结果为:(1,2,3,4)
func(*[1,2,3,4]) #输出结果为:(1,2,3,4)   **kwargs:可以接收任意个关键字参数,并将参数转化为字典。(只能接收关键字参数)
  调用参数无*
  调用参数有** 
def func(**kwargs):
print(kwargs) func(k1= 1,k2="alex") #输出的结果为:{'k1': 1, 'k2': 'alex'}
func(**{'k1': 1, 'k2': 'alex'}) #输出的结果为:{'k1': 1, 'k2': 'alex'}

  f.综合应用 无敌(位置参数)+无敌(关键字参数)

  示例:

def func(*args,**kwargs):
print(args,kwargs)
func(1,2,3,4,5,k1=2,k5=9,k19=999) #输出结果为:(1,2,3,4,5){'k1':2,'k2':9,'k19':999}
func(*[1,2,3],k1=2,k5=9,k19=999) #输出结果为:(1,2,3){'k1':2,'k2':9,'k19':999}
func(*[1,2,3],**{'k1':1,'k2':3}) #输出结果为:(1,2,3){'k1':2,'k2':3}
func(111,222,*[1,2,3],k11='alex',**{'k1':1,'k2':3}) #输出结果为:(111,222,1,2,3){'k11':'alex','k1':1,'k2':3}

参数相关重点

  1.定义参数 

def func1(a1,a2):
pass def func2(a1,a2=None):
pass def func3(*args,**kwargs):
pass
 2.调用参数 位置参数>关键字参数

2.作用域

  python中:py文件:全局作用域

  函数:局部作用域(注意:一个函数就是一个作用域) 

a=1
def s1():
x1 = 666
print(x1)
print(a)
print(b)
b=2
print(a)
s1()
a=88888
def s2():
print(a, b)
s1()
s2()

#输出的结果依次为:

#1 #666  #1 #2 #88888  2 # 666 # 88888 # 2

作用域中查找数据规则:优先在自己作用域找数据,自己没有就去父级-->父级-->直到全局,全部没有就报错。在此注意的是父级作用域中的值到底是什么?
def func():
x = 9
print(x)
func() #此处打印9
print(x) #此处报错,没有全局没有x变量的值

4.练习题

x=10
def func():
x=9
print(x)
def x1():
x=999
print(x)
func() #打印一个9 x=10
def func():
x=9
print(x)
def x1():
x = 999
print(x)
x1()
func() #打印一个9 999 x=10
def func():
x=9
print(x)
def x1():
x = 999
print(x)
print(x)
x1()
func() #打印一个9 9 999 x = 10
def func():
x = 8
print(x)
def x1():
x = 999
print(x)
x1()
print(x)
func() #打印一个8 999 8 x = 10
def func():
x = 8
print(x)
def x1():
print(x)
x1()
print(x)
func() #打印一个8 8 8 x = 10
def func():
x = 8
print(x)
def x1():
print(x)
x = 9
x1()
x = 10
print(x)
func() #打印一个8 9 10 x = 10
def func():
x = 8
print(x)
def x1():
print(x)
x1()
x = 9
x1()
x = 10
print(x)
func() #打印一个8 8 9 10
name='oldboy'
def func():
name = 'alex' # 在自己作用域再创建一个这样的值。  
print(name)
func()
print(name)
#输出的结果为:alex oldboy name=[1,2,43]
def func():
name.append(999)
print(name)
func()
print(name)
#输出结果为:[1,2,3,43,999]
#[1,2,3,43,999] 

注意:子作用域中只能找到父级中的值,默认无法重新为父级的变量进行赋值;(如果非要强制赋值,可以使用golbal/nonlocal)

关于golbal与nonlocal的示例:

示例一
name=["老男孩",'alex']
def func():
global name
name='我'
func()
print(name)
输出结果为:我 #示例二
name="老男孩"
def func():
name='alex'
def inner():
global name
name=999
inner()
print(name)
func()
print(name)
#输出结果为:alex 9999 #示例三
name="老男孩"
def func():
name='alex'
def inner():
global name
name=999
inner()
print(name)
func()
print(name)
#输出结果为:alex 9999 nonlocal
name="老男孩"
def func():
name='alex'
def inner():
nonlocal name #找到上一级的name
name=999
inner()
print(name)
func()
print(name)
#输出结果为: 999 老男孩

补充

  以后全局变量必须是大写  

USER_LIST=[11,22,3]
def func():
name = 'asdf'
USER_LIST.append(12)
USER_LIST.append(name)
func()
print(USER_LIST)
#输出结果为:[11, 22, 3, 12, 'asdf']

总结

  参数:

    调用(执行)参数时,传参:位置参数> 关键字参数

    定义参数:

    def func(a)

    def func(a,b = None) #对于默认值,如果是可变类型,存在坑

    def func(*args,**kwargs)

  作用域:

    函数为作用域

    作用域:自己 >父级>父级 >全局 【读/修改可变类型】

      重新赋值:global/nonlocal

20200116--python学习第十天的更多相关文章

  1. Python 学习 第十篇 CMDB用户权限管理

    Python 学习 第十篇 CMDB用户权限管理 2016-10-10 16:29:17 标签: python 版权声明:原创作品,谢绝转载!否则将追究法律责任. 不管是什么系统,用户权限都是至关重要 ...

  2. Python学习笔记(十二)—Python3中pip包管理工具的安装【转】

    本文转载自:https://blog.csdn.net/sinat_14849739/article/details/79101529 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...

  3. 【Python学习之十】操作数据库

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 操作mysql数据库 1.安装pymysql模块p ...

  4. python学习笔记(十 一)、GUI图形用户界面

    python图形用户界面就是包含按钮.输入框.选择框等组件的窗口.主要依赖与工具包进行代码编写.python GUI工具包并发互斥的,你可以选择多个工具包进行安装,有极大选择空间.每个工具包都有不同用 ...

  5. Python学习第十五篇——类继承和类实例化

    学习Python类时,我们明白了类的本质,以及所谓的面向对象编程思想强调的对事物本身的属性,我们对某一类事物进行描述——采用了很多方法,这些方法描述了类的属性(比如猫科动物的眼睛,四肢,是否哺乳类等等 ...

  6. Python学习(十四) —— 并发编程

    一.进程的概念 进程即正在执行的一个过程,进程是对正在运行的程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念.操作系统的其它所有内容都是围绕进程的概念展开的. #必备的理论基础 #一 ...

  7. Python学习二十八周(vue.js)

    一.指令 1.一个例子简单实用vue: 下载vue.js(这里实用1.0.21版本) 编写html代码: <!DOCTYPE html> <html lang="en&qu ...

  8. python 学习笔记(十二) 文件和序列化

    python 文件读写和序列化学习.## python文件读写`1 打开并且读取文件` f = open('openfile.txt','r') print(f.read()) f.close() ` ...

  9. Python学习札记(十五) 高级特性1 切片

    参考: 高级特性 切片 Note 1.掌握了Python的基础语法之后,就可以写出很多很有用的程序了,比如打印1-90的奇数: #!/usr/bin/env python3 L = [] n = 1 ...

  10. python学习(十二)模块

    怎么一下子就来学了模块? 其实学了判断.循环.函数等知识就可以开始下水写程序了,不用在意其他的细节,等你用到的时候再回过头去看,此所谓囫囵吞枣学习法. 为啥学模块? 有点用的.或者有点规模的程序都是要 ...

随机推荐

  1. 浏览器从输入url 到页面展示完成响应过程

    用户从输入 url 到浏览器响应,呈现给用户的具体过程 1.用户在输入栏输入地址 (1) 如果有 beforeunload 事件会先执行判断继续还是跳出操作 (2) 浏览器进程识别是 地址还是关键字检 ...

  2. 【LC_Lesson3】---回文数的判别

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...

  3. 执行sql中的 函数,function

    CREATE FUNCTION [dbo].[GetWeight] ( ,)--重量/体积重 ) ,) as begin --顺丰重量/体积重以0.5kg为单位向上取值(小数点后两位4舍5入) ,) ...

  4. 使用远程接口库进一步扩展Robot Framework的测试能力

    引言: Robot Framework的四层结构已经极大的提高了它的扩展性.我们可以使用它丰富的扩展库来完成大部分测试工作.可是碰到下面两种情况,仅靠四层结构就不好使了: 1.有些复杂的测试可能跨越多 ...

  5. http的异步请求

    需要用到的包(包版本应该可能不同): httpcore-4.1.4.jar httpsayncclient-4.0-alpha3.jar httpcore-nio-4.2-alpha3.jar /** ...

  6. Oracle GoldenGate for DB2

    --Enable logdb2 update db cfg using LOGARCHMETH1 DISK:/home/db2inst1/arclogs--Rebootdb2 terminatedb2 ...

  7. Spring 中读取文件-ResourceLoaderAware

    Spring 中读取文件-ResourceLoaderAware 概述 Spring ResourceLoader为我们提供了一个统一的getResource()方法来通过资源路径检索外部资源.从而将 ...

  8. 利用http协议使用普通的网站虚拟主机+安信可A6C GPRS模块实现对stm32的远程升级

    步骤: 1.生成bin文件并将bin文件放到虚拟主机目录内 2.做一个php的页面分块读取该bin文件,以asc字符echo出来,并标记好头尾长度和校验. 3.GPRS协议栈连接主机路径,收到内容,将 ...

  9. Mysql Innodb cluster集群搭建

    之前搭建过一个Mysql Ndb cluster集群,但是mysql版本是5.7的,看到官网上mysql8的还是开发者版本,所以尝试搭建下mysql Innodb cluster集群. MySQL的高 ...

  10. npm、node版本升级与淘宝镜像

            npm --version  ==   npm -v       查看npm版本            node -v  查看node版本         升级npm版本   npm  ...