今日内容

  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. 速石科技携HPC混合云平台亮相AWS技术峰会2019上海站

    2019年6月20日,全球云技术盛会——AWS技术峰会2019(上海站)在上海世博中心举行.作为AWS的技术合作伙伴,速石科技携旗下基于混合云的一站式高性能计算(HPC)平台首次公开亮相. 速石科技向 ...

  2. Java StringBuilder类

    StringBuilder的原理 String类 字符串是常量,它们的值在创建之后不能更改 字符串的底层是一个被final修饰的数组,不能改变 private final byte[] value; ...

  3. 虚拟机安装(Vmware14)

    下载Vmvare,然后安装. 安装成功后,对两个版本的了解:简单来说Pro的版本更复杂. 创建新的虚拟机时遇到提示BIOS固件问题,提示说Intel的Uirtualizatuion未被激活,解决方案关 ...

  4. bootstrap4popper.js报错Uncaught ReferenceError

    这是因为bootstrap4需要umd版的popper.js <script src="https://cdn.bootcss.com/popper.js/1.15.0/umd/pop ...

  5. hdfs断电报错解决

    一,/home/hadoop/tmp/dfs/name/current 目录下查看文件二,1.stop hadoop所有的服务;2.重新格式化namenode即可: hadoop根目录下: hadoo ...

  6. load文件到hive,并保存

    DataFrame usersDF = sqlContext.read().load("hdfs://spark1:9000/users.parquet"); usersDF.se ...

  7. TornadoFx学习笔记(1)——常用的代码片段

    Tornadofx是基于JavaFx的一个kotlin实现的框架 之后看情况补充.. 1.读取resources文件夹中的文件 如图 想要读取config.properties文件,有两种方法 在cl ...

  8. 生产者消费者代码学习,Producer_Consuner

    使用BlockingQuery实现生产者者消费者:考虑并发,解耦. 生产者消费者模式是面向过程的设计模式. 生产者制造数据   ------> 生产者把数据放入缓冲区  -------> ...

  9. Python通过win32 com接口实现offic自动化

    最近几天通过Python做一些自动生成office报表的东东,比如解析.xml文件,导出.html/WORD/PPT等格式,html不足一提,只需要简单的html静态网页知识即可,这儿要说的是怎么生成 ...

  10. php--->单例模式封装mysql操作类

    php 单例模式封装mysql操作类 单例模式的必要条件(三私一公) 私有的成员属性--防止类外引入这个存放对象的属性 私有的构造方法--为了防止在类外使用new关键字实例化对象 私有的克隆方法--为 ...