python学习之老男孩python全栈第九期_day010知识点总结
def qqxing(l = []): # 可变数据类型
l.append(1)
print(l)
qqxing() # [1]
qqxing([]) # [1]
qqxing() # [1, 1]
qqxing() # [1, 1, 1]
# 如果默认参数的值是一个可变数据类型,那么每一次调用函数的时候,如果不传值,就公用这个数据类型的资源
def qqxing(l = {}): # 可变数据类型
l['k'] = 'v'
print(l)
qqxing() # {'k': 'v'}
qqxing({}) # {'k': 'v'}
qqxing() # {'k': 'v'}
qqxing() # {'k': 'v'}
def qqxing(k, l = {}): # 可变数据类型
l[k] = 'v'
print(l)
qqxing(1) # {1: 'v'}
qqxing(2) # {1: 'v', 2: 'v'}
qqxing(3) # {1: 'v', 2: 'v', 3: 'v'}
qqxing(4) # {1: 'v', 2: 'v', 3: 'v', 4: 'v'}
# 函数进阶
# a = 1
# def func():
# print(a)
# func()
# def func(): # 报错
# a = 1
# func()
# print(a)
# 命名空间和作用域
# 命名空间:有三种
# 内置的命名空间 -- python解释器
# 就是python解释器一启动就可以使用的名字,存储在内置命名空间中(比如:print())
# 内置的名字在启动解释器的时候被加载进内存里
# 全局命名空间 -- 我们写的代码,但不是函数中的代码
# 是在程序从上到下被执行的过程中一次加载进内存的
# 放置了我们设置的所有变量名和函数名
# 局部命名空间 -- 函数
# 就是函数内部定义的名字
# 当调用函数的时候才会产生这个名称空间,随着函数执行的结束,这个命名空间就又消失了
# 在局部中,可以使用全局、内置命名空间中的名字
# 在全局中:可以使用内置命名空间中的名字,但是不能用局部中的名字
# 在内置中:不能使用局部和全局的名字的
#-------------------------------------------------------------------------------------#
# 当我们在全局定义了和内置命名空间中相同的名字, 会使用全局的名字
# 在正常情况下(全局没有定义),直接使用内置的名字
# 当我自己有的时候, 就不找上级要了;如果自己没有, 就一直找上一级要.若最后都没有就会报错
# 多个函数应该拥有多个独立的局部名字空间,不互相共享
# def input():
# print('in input now')
#
# def func():
# # input = 1
# print(input)
# input()
# func()
'''
func --> 函数的内存地址
func() --> 函数名(): 函数的调用
故 --> 函数的内存地址():函数的调用
'''
'''
def func():
a = 1
def func():
print(a)
只能从上级找,不能局部命名空间之间找
# 多个函数应该拥有多个独立的局部名字空间,不互相共享
'''
# 作用域:两种
# 全局作用域 --> 作用在全局 -- 内置和全局名字空间中的名字都属于全局作用域 -- globals()
# 局部作用域 --> 作用在局部 -- 函数(局部名字空间中的名字属于局部作用域) -- locals()
'''
对于不可变数据类型,在局部可以查看全局作用域中的变量,但是不能 直接 修改;
如果想要修改,需要在程序中的一开始添加global声明(尽量少使用)
如果在一个局部(函数)内声明了一个global变量,那么这个变量在局部的所有操作将对全局的变量有效
locals() 函数会以字典类型返回*当前位置*的全部局部变量
本地的:locals()放在局部就打印局部的全部变量,放在全局里就是打印全局的全部变量,这时等于globals()
a = 1
def func():
a += 1
print(a)
func()
-------------------------------------------------------------
a = 1
def func():
global a
a += 1
print(a)
func()
'''
#
# a = 1
# b = 2
# def func():
# x = 'xxx'
# y = 'yyy'
# print(locals())
# func()
# print(globals())
# globals()永远打印全局的名字
# locals():输出什么 会根据locals所在的位置
# def max(a,b):
# if a > b:
# return a
# else:
# return b
#
# def the_max(x,y,z): # 函数的嵌套调用
# c = max(x,y)
# return max(c,z)
# print(the_max(1,2,3))
# 函数的嵌套定义
# 内部函数可以使用外部函数的变量
# nonlocal 只能用于局部变量(对全局无效),找上层中离当前函数最近一层的局部变量(对局部也是对最近的一层有影响)
# 声明了nonlocal的内部函数的变量修改会影响到离当前函数最近一层的局部变量
# a = 5
# def outer():
# a = 1
# def inner():
# b = 2
# def inner2():
# # print(a, b)
# # global a # 声明一个全局变量(但这个地方的a是局部变量)
# nonlocal a # 声明一个上面第一层 局部 变量, 若所有局部变量都没有, 则报错
# a += 1 #报错, 不可变数据类型的修改
# print('inner2:', a)
# inner2() # 需要调用
# print('inner:',a)
# inner() # 需要调用
# print('outer:', a)
# outer()
# print('**a**:', a)
def func():
print(123)
# func() # 函数名就是内存地址
# func2 = func # 函数名可以赋值
# func2()
#
# l = [func, func2] # 函数名可以作为容器类型的元素
# print(l)
# for i in l:
# i()
# def wahaha(f):
# f()
# wahaha(func) # 函数名可以作为函数的参数
def wahaha(f):
f()
return f # 函数名可以作为函数的返回值
qqxing = wahaha(func) #
qqxing()
# def outer():
# a = 1
# def inner(): # inner()是一个闭包
# print(a)
# print(inner.__closure__) # (<cell at 0x0000027BBB57C828: int object at 0x00007FF9F9D7D420>,)
# # cell 说明inner()是闭包
# outer()
# print(outer.__closure__) # None 说明outer不是闭包
# 闭包:嵌套函数,且内部函数调用外部函数的变量
#
# def outer():
# a = 1
# def inner():
# print(a)
# return inner
# inn = outer()
# inn()
import urllib # 模块
from urllib.request import urlopen
# ret = urlopen('http://www.xiaohua100.cn/guowai/').read()
# print(ret)
# def get_url():
# ret = urlopen('http://www.xiaohua100.cn/guowai/').read()
# print(ret)
def get_url():
url = 'http://www.xiaohua100.cn/guowai/'
def inner():
res = urlopen(url).read()
print(res)
return inner
inn = get_url()
inn()
python学习之老男孩python全栈第九期_day010知识点总结的更多相关文章
- python学习之老男孩python全栈第九期_day027知识点总结——反射、类的内置方法
一. 反射 ''' # isinstance class A:pass class B(A):pass a = A() print(isinstance(a,A)) # 判断对象和类的关系 print ...
- python学习之老男孩python全栈第九期_day023知识点总结——类和对象命名空间、组合
一. 类和对象命名空间类里 可以定义两种属性: 1. 静态属性 2. 动态属性 class Course: language = 'Chinese' def __init__(self, teache ...
- python学习之老男孩python全栈第九期_day019知识点总结——collections模块、时间模块、random模块、os模块、sys模块
一. collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:namedtuple.deque.Counte ...
- python学习之老男孩python全栈第九期_day017知识点总结——初识递归、算法
一. 递归函数 如果一个函数在内部调用自身本身,这个函数就是递归函数. 最大递归深度默认是997 -- python从内存角度出发做得限制(而不是程序真的报错),最大深度可以修改 def func(n ...
- python学习之老男孩python全栈第九期_day007知识点总结
基础数据类型汇总 1. str 2. int 3. list 4. bool 5. dict (1) fromkeys Python 字典 fromkeys() 方法用于创建一个新的字典,并以可迭代对 ...
- python学习之老男孩python全栈第九期_day001知识点总结
1. Python2与Python3的区别: Python2:源码不标准,混乱,重复代码太多: Python3:统一标准,去除重复代码. 编码方式: python2的默认编码方式为ASCII码:pyt ...
- python学习之老男孩python全栈第九期_day014知识点总结
# 迭代器和生成器# 迭代器 # 双下方法:很少直接调用的方法,一般情况下,是通过其他语法触发的# 可迭代的 --> 可迭代协议:含有__iter__的方法( '__iter__' in dir ...
- python学习之老男孩python全栈第九期_day016知识点总结
'''数据类型:intbool... 数据结构:dict (python独有的)listtuple (pytho独有的)setstr''' # reverse() 反转l = [1,2,3,4,5]l ...
- python学习之老男孩python全栈第九期_day015知识点总结
# 作用域相关(2)locals() # 返回本地作用域中的所有名字 globals() # 返回全局作用域中的所有名字 # 迭代器/生成器相关(3)range()print('__next__' i ...
随机推荐
- Vim实用技巧系列 - tab和空格的转换
有时候,我们会修改一些代码,而这些代码中的tab设定和我们自己的设定不一样.例如,我们自己的设定是以两个空格来代替tab,而要修改的代码则是使用tab.那么,我们应该怎样快速的将又有的tab转换为空格 ...
- FastDFS高可用集群架构配置搭建
一.基本模块及高可用架构 FastDFS 是余庆老师开发的一个开源的高性能分布式文件系统(DFS). 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡. FastDFS 系统有 ...
- 13-01 java StringBuffer类,StringBuilder类
StringBuffer类的构造方法 package cn.itcast_01; /* * 线程安全(多线程讲解) * 安全 -- 同步 -- 数据是安全的 * 不安全 -- 不同步 -- 效率高一些 ...
- Android分组子级的不同视图布局之BUG奇遇记
Android分组子级的不同视图布局之BUG奇遇记 最近在使用按日期分类列表,二级条目可能不一样,于是就想到了ExpandableListView. ExpandableListView的布局显示分割 ...
- FineBI学习系列之FineBI的ETL处理(图文详解)
不多说,直接上干货! 这是来自FineBI官网提供的帮助文档 http://help.finebi.com/http://help.finebi.com/doc-view-48.html 目录: 1. ...
- springcloud~演化的微服务架构
微服务 将整体功能按着模块划分成多个独立的单元,这些单元可以独立部署,它们之前通过轻量级的web api方式进行通讯,对于微服务框架来说,最流行的就是springcloud和Service Fabri ...
- 高可用Hadoop平台-集成Hive HAProxy
1.概述 这篇博客是接着<高可用Hadoop平台>系列讲,本篇博客是为后面用 Hive 来做数据统计做准备的,介绍如何在 Hadoop HA 平台下集成高可用的 Hive 工具,下面我打算 ...
- hadoop家族成员
1.概述 使用hadoop已经有一段时间了,从最开始懵懂到迷茫,再到各种阅读与写作,再到如今各种组合应用,逐渐已经离不开hadoop了,hadoop在大数据行业的成功,加速了它本身的发展,各大社区都能 ...
- js便签笔记(11)——浏览TOM大叔博客的学习笔记 part1
1. 前言 这两天看了一下TOM大叔的<深入理解js系列>中的基础部分,根据自己的实际情况,做了读书笔记,记录了部分容易绊脚的问题.写篇文章,供大家分享. 2. 关于HTMLCollect ...
- mysql 导出 sql的执行结果到 csv文件
需求: 1. 执行某 SQL 的结果: 2. 将结果导出到 csv文件: 3. 通过命令行执行: mysql ;" | sed 's/\t/","/g;s/^/" ...