看到了一个16进制转换的小知识点,就验证了一下运行结果.

#!/usr/bin/env python
# coding:utf-8 # 看到了16进制转换的问题。顺便验证一下。
a = 255
b = 1001
print(hex(a), hex(b)) c = 0xff
d = 0x3e9
print(int(c),int(d))

继续往前走, 学习一下global关键字

参考: http://www.pythonav.com/special/100-18.html

注意: global 是不安全的,尽量少用。建议使用函数的传参代替它。

#!/usr/bin/env python
# coding:utf-8 name = "tom" # 全局作用域 def chg_name():
global name # 有关键字
name = "jerry" # 修改了全局的变量
age = 38 # 局部作用域
print('change_name', name,age) # 如果函数内部没有global关键字,只能读取全局变量,无法对全局变量重新赋值.
# 但是对于可变类型,依然可对内部元素进行操作. names =['toma','abc','kaka'] def qiuxin():
names.append('meixi')
print(names) qiuxin() def change_name():
# name = "Anna" #
age = 18 # 局部作用域
print(name,age) # def change_name2():
# name = "Anna" #
# age = 18 # 局部作用域
# global name # 关键字需要放在局部的最上面.
# print(name,age) change_name()
chg_name()
print(name) ### 规则: 全局变量名全部大写, 局部变量小写
# 命名空间 有三种
# 内置命名空间 —— python解释器
# 就是python解释器一启动就可以使用的名字存储在内置命名空间中
# 内置的名字在启动解释器的时候被加载进内存里
# 全局命名空间 —— 我们写的代码但不是函数中的代码
# 是在程序从上到下被执行的过程中依次加载进内存的
# 放置了我们设置的所有变量名和函数名
# 局部命名空间 —— 函数
# 就是函数内部定义的名字
# 当调用函数的时候 才会产生这个名称空间 随着函数执行的结束 这个命名空间就又消失了 # 在局部:可以使用全局、内置命名空间中的名字
# 在全局:可以使用内置命名空间中的名字,但是不能用局部中使用
# 在内置:不能使用局部和全局的名字的

验证一下函数以及变量的作用域:

#!/usr/bin/env python
# coding:utf-8 # 函数的嵌套
# 函数的嵌套定义
# 内部函数可以使用外部函数的变量
def huangwei():
name = "黄伟"
print(name) def liuyang():
name = "刘洋"
print(name) def nuli():
name = "沪上"
print(name) print(name)
nuli() liuyang()
print(name) huangwei() ## 以上代码的执行顺序,可以通过断点调试来验证。 ename = "tom" def wei():
ename = "U" def suo():
global ename # 这里实际上拿到的是 tom
ename = 'SA' suo()
print(ename) # 这里实际上是32行的U print(ename)
wei()
print(ename)

与global作为对比的,有另一个关键字 nonlocal

#!/usr/bin/env python
# coding:utf-8 ename = "tom" def wei():
ename = "U" def suo():
nonlocal ename # 这回拿到的是上一级的
ename = 'SA' suo()
print(ename) # 这里实际上是32行的U print(ename)
wei()
print(ename)
# nonlocal 只能用于局部变量 找上层中离当前函数最近一层的局部变量
# 声明了nonlocal的内部函数的变量修改会影响到 离当前函数最近一层的局部变量
# 对全局无效
# 对局部 也只是对 最近的 一层 有影响

函数即变量

来自:  http://www.cnblogs.com/linhaifeng/articles/6113086.html#label1

函数名 作为函数的返回值 或 参数

# def func():
# print(123)
#
# # func() #函数名就是内存地址
# func2 = func #函数名可以赋值
# func2()
#
# l = [func,func2] #函数名可以作为容器类型的元素
# print(l)
# for i in l:
# i() def func():
print(123) def wahaha(f):
f()
return f #函数名可以作为函数的返回值 qqxing = wahaha(func) # 函数名可以作为函数的参数
qqxing()

递归:

#!/usr/bin/env python
# coding:utf-8 ### 递归好比问路
# 递归效率不高, def calc(n):
print(n)
if int(n / 2) == 0:
return n
res = calc(int(n / 2))
return res calc(10)

关于问路的举例:

#_*_coding:utf-8_*_
__author__ = 'Linhaifeng'
import time person_list=['alex','wupeiqi','yuanhao','linhaifeng']
def ask_way(person_list):
print('-'*60)
if len(person_list) == 0:
return '没人知道'
person=person_list.pop(0)
if person == 'linhaifeng':
return '%s说:我知道,老男孩就在沙河汇德商厦,下地铁就是' %person
print('hi 美男[%s],敢问路在何方' %person)
print('%s回答道:我不知道,但念你慧眼识猪,你等着,我帮你问问%s...' %(person,person_list))
time.sleep(3)
res=ask_way(person_list)
# print('%s问的结果是: %res' %(person,res))
return res res=ask_way(person_list) print(res)

直接cp了老师的总结: 其实想要掌握,还是要多练,多练,多练, 还是多练.

递归特性:

1. 必须有一个明确的结束条件

2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

堆栈扫盲http://www.cnblogs.com/lln7777/archive/2012/03/14/2396164.html 

尾递归优化:http://egon09.blog.51cto.com/9161406/1842475

闭包:

https://www.cnblogs.com/Eva-J/articles/7156261.html#_label5

# 闭包:嵌套函数,内部函数调用外部函数的变量
def outer():
a = 1
def inner():
print(a)
# __closure__ 可以用来判断闭包
# print(inner.__closure__) # 打印 cell at ... 则表明它是一个闭包
return inner # 返回内部函数的内存地址,因为此函数用到了外部函数的变量,所以外部函数的变量也不会因函数的调用结束而消失
inn = outer()
inn() from urllib.request import urlopen
# ret = urlopen('http://www.xiaohua100.cn/index.html').read()
# print(ret) # def get_url():
# url = 'http://www.xiaohua100.cn/index.html'
# ret = urlopen(url).read()
# print(ret)
#
# get_url() # 闭包的简单示例:
# def get_url():
# url = 'http://www.xiaohua100.cn/index.html'
# def get():
# ret = urlopen(url).read()
# print(ret)
# return get # 得到 url 结果
#
# get_func = get_url() # 将结果赋给变量,保存下来。
# get_func()
#

python基础11_函数作用域_global_递归的更多相关文章

  1. 九. Python基础(9)--命名空间, 作用域

    九. Python基础(9)--命名空间, 作用域 1 ● !a 与 not a 注意, C/C++可以用if !a表示if a == 0, 但是Python中只能用if not a来表示同样的意义. ...

  2. python基础之函数详解

    Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...

  3. python基础——匿名函数及递归函数

    python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...

  4. 十一. Python基础(11)—补充: 作用域 & 装饰器

    十一. Python基础(11)-补充: 作用域 & 装饰器 1 ● Python的作用域补遗 在C/C++等语言中, if语句等控制结构(control structure)会产生新的作用域 ...

  5. python基础——匿名函数

    python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.  在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...

  6. python基础——返回函数

    python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.  我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...

  7. python基础——sorted()函数

    python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...

  8. python基础——filter函数

    python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...

  9. 八. Python基础(8)--函数

    八. Python基础(8)--函数 1 ● 函数返回布尔值 注意, 自定义的函数也可以是用来作逻辑判断的, 例如内置的startswith()等函数. def check_len(x):     ' ...

随机推荐

  1. IDEA中文出现乱码解决(转)

    转自:http://lcl088005.iteye.com/blog/2284696 我是个idea的忠实用户,新公司的项目都是用eclipse做的,通过svn拉下代码后发现,注释的内容里,中文内容都 ...

  2. php 根据日期获取星座

    根据日期获取星座 /* * * 获取星座 * 星座是按阳历来计算的 * $month 阳历月份 * $day 阳历日期 * */ public static function get_xingzuo( ...

  3. Html 符号

    Html  符号 往网页中输入特殊字符,需在html代码中加入以&开头的字母组合或以&#开头的数字. 下面就是以字母或数字表示的特殊符号大全.   常用 < < 小于号或显 ...

  4. linux PWM蜂鸣器移植以及驱动程序分析【转】

    本文转载自:https://blog.csdn.net/lxllinux/article/details/80885331 一.关于PWM:        PWM(Pulse Width Modula ...

  5. 20175312 2018-2019-2 《Java程序设计》第4周学习总结

    20175312 2018-2019-2 <Java程序设计>第4周学习总结 教材学习内容总结 已依照蓝墨云班课的要求完成了第五章的学习,主要的学习渠道是PPT,和书的课后习题. 总结如下 ...

  6. python腾讯语音合成

    一.腾讯语音合成介绍 腾讯云语音合成技术(TTS)可以将任意文本转化为语音,实现让机器和应用张口说话. 腾讯TTS技术可以应用到很多场景,比如,移动APP语音播报新闻:智能设备语音提醒:依靠网上现有节 ...

  7. Query the tables and index which will caus rebuild index fail

    On MSSQL server database, while rebuild index failed, we can use the follow sql statement to see if ...

  8. Hnoi-2017 滚粗记

    一路走来,OI生涯中最重要的一场比赛在10个小时的比赛后,在不止10个小时的焦急等待中,也就这么结束了呢... Day 0: 当时其实内心里面还是比较虚的,还记得在回家的路上和$DYC$大佬畅想我们省 ...

  9. DAY9 函数

    一.脚本文件的执行 1.存放当前文件作为脚本文件执行的参数们:[‘当前文件的绝对路径’,手动传入的参数们] 2.脚本文件执行:直接用python解释器运行该文件  print(sys.argv) # ...

  10. JS实时获取输入框中的值

    实时获取input输入框中的值需要oninput和onpropertychange属性来实现.原因是onpropertychange属性为IE专属,而oninput属性支持大部分浏览器包括IE9及以上 ...