总结十

一.函数对象

函数是第一类对象:函数名指向的值可以被当中参数传递

1.函数名可以被传递

name = 'jason'

x = name

print(x)

print(id(x))

def func():

    print('from func')

# print(func)

print(id(func))

 

f = func

func()

print(f)

f()   #  其实指向的也是函数func指向函数体代码的内存地址

 

 

2.函数名可以被当做参数传递给其他函数

def func():

    print('from func')

 

def index(args):

    print(args)

    args()

    print('from index')

# index(1)

index(func)

 

 

3.函数名可以被当做函数的返回值

def index():

  print('index')

 

def func():

  print('func')

  return index

res = func()

res()

 

 

4.函数名可以被当做容器类型的参数

def func():

  print('func')

print(func())

l = [1,2,func,func()]    #  [1,2,<function func at 0x00001F7D79899D8>,None]

print(l)

 

 

循环打印项目功能提示信息   供用户选择  用户选哪个就执行哪个

def register():

  username = input('username>>>:').strip()

  pwd = input('password>>>:').strip()

  print(username,pwd)

  print('register ...')

def login():

  print('login ...')

def transfer():

  print('transfer ...')

def shopping():

  print('shopping ...')

def pay():

  print('pay ...')

 

msg = """

1 注册

2 登录

3 转账

4 购物

5 支付

"""

func_dict = {

  '1':register,

  '2':login,

  '3':transfer,

  '4':shopping,

  '5':pay,

}

whilr True:

  print(msg)

  choice = input('请输入你想要执行的功能>>>:').strip()

  if choice in func_dict:

    func_dict.get(choice)()   #  函数名()

  if choice == '1':

    register()

  elif choice == '2':

    login()

  elif choice == '3':

    transfer()

  elif choice == '4':

    shopping()

  elif choice == '5':

    pay()

  else:

    print('你输入的功能暂时没有')

 

二.函数的嵌套调用

在函数内部调用其他函数,可以将复杂的逻辑简单化

def index():

  func()

  print('index')

def func():

  # index()

  print('func')

index()

 

def my_max(x,y):

  if x > y:

    return x

  return y

def my_max4(a,b,c,d):

  res1 = my_max(a,b)

  res2 = my_max(res1,c)

  res3 = my_max(res2,d)

  return res3

print(my_max4(5,7,12,8))

 

三.函数的嵌套定义

def outer():

  x = 1

  print('outer')

  def inner():

    print('inner')

     #  print(inner)

  return inner

res = outer()

# print(res)

res()

 

函数内定义函数应用场景

"""

写一个函数

该函数用户可以通过传参的不同控制函数执行不同的功能

"""

 

四.名称空间

名称空间:简单来说就是放名字的地方

详细解释:存放的是变量名与变量值的内存地址的绑定关系的地方

要想访问一个变量的值,必须先去名称空间中拿到对应的名字,才能够访问变量的值

# name = 'jason'

# print(name)

 

x = 1

if 1 == 1:

  y = 2

# print(y)

# while True:

#  z = 3

for i in [1,2,3]:

  print(i)

print(i)

def func():

  username = 'jason'

print(x)

func()

"""

名称空间的分类

  1.内置名称空间:python解释器提前给你定义好的名字(已经存放到内置名称空间中了)

  len

  max

  min

  2.全局名称空间:文件级别的代码

  x = 1

  if 1 == 1:

    y = 2

  print(y)

  while True:

    z = 3

  x,y,z都会放到全局名称空间

  if for while 无论嵌套多少层,它们内部所创建的名字都是全局名称空间的

  3.局部名称空间:函数体内创建的名字都是属于局部名称空间

  username

 

生命周期:

  内置名称空间:只要python解释器已启动立马创建,关闭python解释器的时候

         内置名称空间自动销毁

  全局名称空间:只要右键运行py文件会自动创建,py文件程序运行结束自动销毁

  局部名称空间:函数被调用的时候自动创建,函数指向结束立即销毁

           (动态创建动态销毁)

"""

 

五.名称空间的查找顺序

len = '我是全局名称空间的len'

def func():

  # len = '我是局部名称空间的len'

  print(len)

 

# print(len)     #  现在站在的是全局的位置

func()

 

def index():

  x = 'xxx'

def index2():

  print(x)

  y = 666

index()

index2()

"""

名字的查找(******)

  1.需要先确定你当前在哪(大前提)

    1.站在全局:全局 > 内置

    2.站在局部:局部 > 全局 > 内置

 

"""

x = 111

def f1():

  x = 222

  def f2():

    x = 333

    def f3():

      # x = 444

      def f4():

        # x = 555

        print(x)

      f4()

    f3()

  f2()

f1()

 

def func():

  x = 1

  def index():

    print(x)    #  全局找x

  return index

res = func()

x = 999

res()

 

"""

函数在定义阶段查找名字的顺序就已经固定了,不会因为函数的调用位置变化而改变(******)

"""

 

六.作用域

作用域:

全局作用域

全局有效:内置名称空间  全局名称空间

 

局部作用域

局部有效   局部名称空间

 

#   global  nonlocal

 

#  global 在局部修改全局的不可变数据类型

#  x = [ ]    #  因为列表是科比那类型

x = 1   #  不可变类型

username = 'jason'

def func():

  # x.append('哈哈哈')

  global x,uesrname   #  修改全局变量,而不是创建局部名称空间

  x = 999

  username = 'egon'

func()

print(x)

print(username)

 

 

#  nonlocal    局部修改局部

def func():

  x = 1

  def index():

    nonlocal x

    x = 2

  index()

  print(x)

func()

 

"""

global:局部修改全局,如果想修改多个,用逗号隔开

nonlocal:局部修改局部,如果想修改多个,用逗号隔开

"""

 

转载于:https://www.cnblogs.com/TZZ1995/p/11165348.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值