一.第一类对象, 函数名的使用

函数名就是变量名, 函数名存储的是函数的内存地址

  1. 变量的命名规范:
  2. 由数字, 字母, 下划线组成
  3. 不能是数字开头, 更不能是纯数字
  4. 不能用关键字
  5. 不要太长
  6. 要有意义
  7. 不要用中文
  8. 区分大小写
  9. 驼峰或者下滑线

2. 闭包
闭包: 在内层函数中引入外层函数的变量
作用:

  1. 保护变量不受侵害(javascript)
  2. 让一个变量常驻内存

 

*闭包的作用:保护我们的变量,必须是局部变量
a = 10 # 全局的东西都是不安全的 def func1():
print(a) def func2():
print(a) func1() # 你的同事搞事情
def func3():
global a
a = 20 func3() func2() def func():
a = 10 # 安全的
def func2():
print(a)
def func3():
print(a)
def func4():
nonlocal a
a = 20 闭包: 内层函数对外层函数的变量的使用
作用:
1. 保护我们的变量不受侵害
2. 可以让一个变量常驻内存. def outer():
# a = 10
def inner():
print("哈哈")
print(inner.__closure__) # (<cell at 0x000001C079677588: int object at 0x0000000054776D30>,)
return inner ret = outer()
# 1800行代码...
ret() # 由于inner函数执行的时机是不确定的. 必须要保证innter可以正常执行. 必须把a保留到最后 # 爬虫 (low版本)
from urllib.request import urlopen # 打开一个连接用的模块
# 外层函数
def but():
# 打开连接. 读取源代码
content = urlopen("http://www.cctv.com/").read() # 永久驻留在内存
# 内层函数
def get_content():
# 返回content
return content
return get_content # 内层函数 fn = but() # 这里会很慢. 需要网络请求
print(fn()) # 不会再进行网络请求了
print(fn()) 关联的小点
def func(a, b):
'''
文档注释
这个函数用来计算两个数的和并返回
:param a: 第一个数
:param b: 第二个数
:return: 第一个数和第二个数的和
author:sylar
date:2018-10-31
'''
print("我是func")
return a + b
print(func.__doc__) # document 文档注释
print(func.__name__) # name 名字 获取函数名

  

二. 迭代器
dir() 查看变量能够执行的方法(函数)
Iterator: 迭代器, __iter__(), __next__()
Iterable: 可迭代的, __iter__()

for循环的流程:
it = lst.__iter__()
while 1:
try:
el = it.__next__()
for循环的循环体
except StopIteration:
break

从迭代器中获取数据的唯一方法: __next__()

迭代器的三个特征:

  1. 省内存
  2. 惰性机制
  3. 只能往前. 不能后退
print(dir(str)) # 查看str能够执行的操作. 内部的方法
__iter__ 字符串可以被迭代. 发现了__iter__
print(dir(list))
print(dir(open("x",mode="w"))) # int中没有__iter__ 简单的下一个结论. 主要这个数据类型可以执行__iter__ 可以被迭代的数据类型
lst = ["汉高祖", "清高祖", "明高祖", "哈哈", "娃哈哈", "爽歪歪"]
it = lst.__iter__() # <list_iterator object at 0x000001ED54B17128> iterator 迭代器
print(it)
print(dir(it)) # 迭代器本身是可迭代的
可以使用__next__获取数据
print(it.__next__()) # 汉高祖
print(it.__next__()) # 清高祖
print(it.__next__()) # 明高祖
print(it.__next__()) # 明高祖
print(it.__next__()) # 明高祖
print(it.__next__()) # StopIteration 迭代器中没有元素了. for循环内部的代码
it = lst.__iter__() # 获取新的迭代器
while 1:
try:
el = it.__next__()
print(el)
except StopIteration:
print("结束了")
break list(内部有for循环)
for内部 迭代器
lst = [1,55,5,55,5,5,5,555,55,555]
ll = list(set(lst))
print(ll)
list(1) # 'int' object is not iterable 如何判断一个数据是否是可迭代对象
1. dir() -> __iter__ 可迭代的
dir() -> __next__ 迭代器
lst = ["秦始皇", "汉武帝", "孝文帝", "隋炀帝", "李世民"]
print("__iter__" in dir(lst)) # True 可迭代的
print("__next__" in dir(lst)) # False 不是迭代器 print("__iter__" in dir(int))
print("__next__" in dir(int)) it = lst.__iter__() # 迭代器
print("__iter__" in dir(it)) # True 迭代器本身就是可迭代的
print("__next__" in dir(it)) # True
lst = ["秦始皇", "汉武帝", "孝文帝", "隋炀帝", "李世民"] # collections 关于集合类的相关操作
# Iterable : 可迭代的
# Iterator : 迭代器
from collections import Iterable, Iterator
print(isinstance(lst, Iterable)) # True
print(isinstance(lst, Iterator)) # False print(isinstance({1,2,3}, Iterable)) # True, 可以使用for循环

三..练习

1.写函数,接收一个参数(此参数类型必须是可迭代对象),将可迭代对象的每个元素以’_’相连接,形成新的字符串,并返回.
例如 传入的可迭代对象为[1,'老男孩','武sir']返回的结果为’1_老男孩_武sir’
def func(can):
if "__iter__" in dir(can): # 判断是否是可迭代的
result = ""
for item in can: # 传递的参数中的每一个元素 "周杰伦"
result += str(item)+"_"
return result.strip("_")
else: # 不是可迭代的
return None # 回去 , 正常来讲这里应该抛出异常. print(func((1,'老男孩','武sir'))) 2.打印图形
*
* * *
* * * * *
* * * * * * *
n = int(input("请输入你要打印多少行"))
for i in range(1, n+1):
# 方案一
for k in range(n-i):
print(" ", end="")
for j in range(2 * i - 1):
print("*", end="")
print() # 换行 #方案二
for i in range(1,n+1)
print(" " * (n - i) + "*" * (2 * i - 1)) 3.求1-100内所有的质数的和(升级题) def func(n): # 只能被1和自身整除的数
if n == 1: # 特殊处理的
return False
# n / 2, 3, 4, 5, 6, 7, 8, 9....n-1
for i in range(2, n):
if n % i == 0: # 不是质数
return False
else:
return True
print(func(2))
sum = 0
for i in range(1, 101):
if func(i): # 如果是质数. 帮我累加
sum += i
print(sum)

  

python函数名称的更多相关文章

  1. python函数名称空间

    一.命名空间概念 命名空间(name space),若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方.命名空间分三种: locals:函数内的名称空间,包括局部变量和形参 gl ...

  2. python函数名称空间与作用域、闭包

    一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...

  3. python函数----名称空间和作用域

    一 名称空间 名称空间即存放名字与对象映射/绑定关系的地方. 对于x=3,Python会申请内存空间存放对象3,然后将名字x与3的绑定关系存放于名称空间中,del x表示清除该绑定关系. ​在程序执行 ...

  4. Python 获取被调用函数名称,所处模块,被调用代码行

    获取被调用函数名称,所处模块,被调用代码行 by:授客 QQ:1033553122 module2.py: #!/usr/bin/env python # -*- coding:utf-8 -*- _ ...

  5. python笔记19-获取当前运行函数名称和类方法名称

    前言 写完代码之后,一般为了方便查看日志,可以在日志输出中加入当前运行的函数名称或类和方法名称,以便于代码报错的时候能快速找到报错的是哪个函数或方法. 那么如何获取当前运行函数(或方法)的名称呢? 获 ...

  6. 【Python】—— 获取当前运行函数名称和类方法名称

    原文出处: python笔记19-获取当前运行函数名称和类方法名称 获取函数名称 1.在函数外部获取函数名称,用.__name__获取 2.函数内部获取当前函数名称,用sys._getframe(). ...

  7. Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法

    Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法 目录 Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global ...

  8. Python 空间名称与闭包函数

    空间名称与闭包函数 名称空间 名称空间 namespaces:存放名字的地方,是对栈区的划分 名称空间在栈区中分为三种,详细的划分不同的空间,不同空间可以存放相同名字的名字 内置名称空间 存放的名字: ...

  9. python函数 与 函数式编程

    「函数」一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序), ...

随机推荐

  1. Python爬虫_Selenium与PhantomJS

    Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动化操作,不同是Selenium可以直接运 ...

  2. 前端框架VUE----表单输入绑定

    vue的核心:声明式的指令和数据的双向绑定. 那么声明式的指令,已经给大家介绍完了.接下来我们来研究一下什么是数据的双向绑定? 另外,大家一定要知道vue的设计模式:MVVM M是Model的简写,V ...

  3. Android 新老两代 Camera API 大起底

    https://blog.csdn.net/Byeweiyang/article/details/80515192 0.背景简介 最近有一部分相机相关的需求,专注于对拍摄的照片.视频的噪点.色温.明暗 ...

  4. 启动项详解和更改deepin启动内核的方法

    内容来自网上查找和总结以及自己的尝试 boot里面的启动项是根据其它文件生成的,如果改boot里面,会在你更新grub后再次回到原来的状态.(之后 我(有显卡驱动问题的用户)通过在开机时选择系统页面按 ...

  5. 在win10下安装eclipse

    1.在官网下载jdk.目前最新版本为jdk8. http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21331 ...

  6. vs2015 dx15开发教程一

  7. UML状态机图【图3】--☆

    UML状态机图 基本概述    状态机图描述的是围绕某一事物状态变化的图.它也是三大流程分析利器之一.它和活动图的区别在于,活动图是描述事物发生的流程,是多个角色参与的,而状态机描述的是事物的状态变化 ...

  8. java利用poi解析excel文件

    首先需要引入以下jar包 如果使用maven,需要添加两个依赖 <dependencies> <dependency> <groupId>org.apache.po ...

  9. tp框架中的一些疑点知识-1

    tp默认的编码是utf-8 Runtime中的Cache和Logs都是分模块的,因为在应用app下可以有多个模块,但是 公共模块和Runtime模块只有一个, 所以, Runtime要包含各个模块的内 ...

  10. hdu1358 Period kmp求循环节

    链接 http://acm.hdu.edu.cn/showproblem.php?pid=1358 思路 当初shenben学长暑假讲过,当初太笨了,noip前几天才理解过来.. 我也没啥好说的 代码 ...