Python基础day-6[函数,命名空间,作用域]

函数的返回值

  通常有参函数是需要返回值的。
  返回值的几种形式:
    1.如果函数内没有return就返回None
    2.return 返回的数据类型没有限制,也可以返回多个值,以元组形式,括号可加可不加
  return的效果:
    终止函数的执行,只能返回一次值.

  函数参数的使用
    python是一种弱类型的语言,参数可以传入任何类型数据
    形参与实参:可以理解为形参就是变量名,而实参就是变量值
def foo(x,y) #x,y 是形参
  return x+y
foo(1,2) #1,2 是实参
    位置参数:按照从左到右的顺序依次定义的参数叫位置参数。
def foo(x,y): #按位置定义的形参,必须被传值,多一个少一个都不行。
  print(x)
  print(y)
foo(1,2) #按位置定义的实参,会一一跟形参对应。
    关键字参数:指的是实参在定义时,按照key=value形式定义。
def foo(x,y): #形参还是按位置定义的。
  print(x)
  print(y)
foo(y=1,x=2) #打破位置的限制,不需要跟形参一一对应,直接指定传值。但是还要遵循不能多不能少。
  注意的问题:
    1.位置实参可以和关键字实参混合使用,但是位置实参必须在关键字实参的前面。
    2.位置实参可以和关键字实参混合使用,但是一个形参只能被传值一次不能被重复传值。
    默认参数:定义函数阶段,就已经为形参赋值。
def foo(x, y=10): # 形参在定义的时候赋值。
  print(x)
  print(y)
foo(x=2) # 实参可以不输入对应的形参,如果输入了就不使用默认参数。
  注意的问题:
    1.必须放在位置参数后面。
    2.默认参数通常要定义成不可变类型。
    3.默认参数只在定义时被赋值一次。

形参的应用:值经常变化的需要定义成位置形参,值大多数情况下都一样需要定义默认参数。
实参的应用:怎么爽怎么用,但是要遵循相应的规则。

    可变长参数:可变长值得是实参的个数不固定 *号等同位置参数
      按位置定义的可变长实参:*
      按关键字定义的可变长实参:**
def func(x,y,*args): #x=1 y=2, args=(3,4,5,6)元组形式
  print(x,y)
  print(args)
func(1,2,3,4,5,6) #实参为位置参数使用*args
func(1,2,*(3,4,5,6)) #等同于 func(1,2,3,4,5,6)

D:\Python\Python36-32\python.exe E:/Python/DAY-6/tmp.py
1 2
(3, 4, 5, 6)
1 2
(3, 4, 5, 6)

Process finished with exit code 0

def func(x, y, **kwargs): # x=1 y=2, kwargs={‘z’:6} 字典形式
  print(x, y)
  print(kwargs)
func(x=2, y=4, z=6) #实参为关键字使用**kwargs

D:\Python\Python36-32\python.exe E:/Python/DAY-6/tmp.py
2 4
{‘z‘: 6}

Process finished with exit code 0

    命名关键字参数:*后面定义的形参(*,name,age)必须以关键字形式被传值
def regist(*,name,age):
  print(name)
  print(age)
regist(name=‘abc‘,age=11)

D:\Python\Python36-32\python.exe E:/Python/DAY-6/tmp.py
abc
11

Process finished with exit code 0

形参:位置参数,默认参数,*.args 命名关键字参数,**kwargs  #一般定义形参就按照这种顺序

  函数的嵌套调用
def max2(x,y):
  if x > y:
    return x
  else:
    return y
def mx4(a,b,c,d):
  res1=max2(a,b)
  res2=max2(res1,c)
  res3=max2(res2,d)
  return res3
  函数的嵌套定义:函数中定义函数,并且只能在同级调用
def f1():
  def f2():
    def f3:
      print(‘f3‘)
    print(‘f2‘)
  print(‘f1‘)

名称空间与作用域
  命名空间:存放名字与值的绑定关系
  种类:
  内置名称空间
    内置在Python解释器内的自带的名字,解释器一启动就生成这个空间
  全局名称空间
    文件级别定义的名字都会存放于全局名称空间,执行python文件时会产生,下面示例
x = 1
def func():
  pass
class foo:
  pass
import os
if 1 > 2:
  y = 3 #这里y没有顶头写但也是全局变量
  局部名称空间
    定义在函数内部的名字,
    局部名称空间只有在调用函数的时候生效,执行完毕失效

三种加载顺序:内置=====>全局======>局部
取值:局部>全局>内置

示例:
max = 10
def tmp():
max = 20
print(max)
tmp() #会打印出20 因为局部优先于全局

  作用域:作用范围
  种类:
    全局作用域
      内置名称空间和全局名称空间的名字,作用范围是全局范围。在整个文件的任意位置都能被引用,全局有效。
    局部作用域
      局部名称空间中的名字,作用范围是局部范围生效。只在函数内部可被引用,局部有效

局部作用域=====>全局作用域
函数的作用域在定义的时候就已经固定死了。
补充:
搜寻变量时,只能由“内”看“外”。不可以反过来。例如在函数内部定义的变量,无法在全局被直接引用。
但是如果在函数内部引用一个变量,但是函数内没有定义,那么会去全局作用域搜寻变量。
x = 1
def func():
x =2
print(globals()) #打印全局作用域name
print(locals()) #打印局部作用域name
func()

函数对象:函数是第一类对象,指的是函数可以被当数据传递
可以被引用,可以当函数的返回值,可以当容器的元素

时间: 2024-08-05 11:16:53

Python基础day-6[函数,命名空间,作用域]的相关文章

python基础之内置函数与匿名函数

python基础之内置函数与匿名函数 内置函数68个如下图 重点的关注的内置函数len,sorted,enumerate,all,any,zip,filter,map,reversed,slice len(o):参数为O,返回数据类型的长度sorted():      sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list iterable:是可迭代类型; cmp:用于比较的函数,比较什么由key决定; ke

萌新向Python数据分析及数据挖掘 第一章 Python基础 第八节 函数

第一章 Python基础 第八节 函数 定义函数 函数 其实就可以理解为外挂,把一些常用的.重复率比较多你又不想重复写的东西写进函数,加上开关实现简化操作 举个简单的例子 1 def greet_user(username): 2 #定义一个叫做"迎接用户"的外挂,让他能直接打印一个问候语,括号里面是函数需要输入的东西,也就是个性化的东西 3 """先是简单的问候语""" 4 print("Hello! "

python基础:名称空间与作用域

Python的变量定义后都有自己的作用域,每个作用域内都有名字空间.名称空间就是变量名称与对象的关联关系.Python中使用变量名引用对象,需要使用该变量时,就在命名空间中进行搜索,获取对应的对象.从目前python的实现上来讲,内部使用了字典,但是并不保证以后会更改实现,所以说现阶段,命名空间是一个字典(dictionary),它的键就是变量名,它的值就是那些变量的值.在一个Python程序运行中,至少有4个scopes是存在的. 直接访问一个变量可能在这四个namespace中逐一搜索. L

Python第二周之函数及其作用域

# 函数 定义: 我们可以把程序中相对独立的功能模块抽取出来,这样的好处是可以减少重复代码的编写,将来可以重复使用这些功能模块,Python中的函数就是代表了这样的功能模块. 命名: age_of_student(官方) 或 ageOfStudent(大部分人的习惯用法,又称驼峰命名法) 调用: import 模块 (as 别名) 函数名(参数) 注意:二元运算符之间放空格,参数里赋值时,等号两边不加空格.例如:def f(x=2) #y = x !定义求阶乘这个函数,将求阶乘这个功能抽取出来,

python 基础篇 11 函数进阶----装饰器

11. 前??能-装饰器初识本节主要内容:1. 函数名的运?, 第?类对象2. 闭包3. 装饰器初识 一:函数名的运用: 函数名是一个变量,但他是一个特殊变量,加上括号可以执行函数. ?. 闭包什么是闭包? 闭包就是内层函数, 对外层函数(非全局)的变量的引?. 叫闭包 可以使用_clesure_检测函数是否是闭包  返回cell则是闭包,返回None则不是 闭包的好处: 由它我们可以引出闭包的好处. 由于我们在外界可以访问内部函数. 那这个时候内部函数访问的时间和时机就不?定了, 因为在外部,

Python 基础语法六 ——函数

一个程序可以按不同的功能实现拆分成不同的模块,而函数就是能实现某一部分功能的代码块. 1.函数的概述 定义:在Python中,定义个函数要使用 def 语句,一次写出函数名.括号.括号中的参数和冒号(:),然后在缩进块中编写函数体,函数的返回值用return 语句返回. def area_of_square(x): s = x*x return s 1 def area_of_square(x): 2 s = x*x 3 return s 2.全局变量 定义:在函数外面定义的变量称为全局变量.

Python基础之内置函数和递归

本文和大家分享的主要是python中内置函数和递归相关内容,一起来看看吧,希望对大家学习python有所帮助. 一.内置函数 下面简单介绍几个: 1.abs() 求绝对值 2.all() 如果 iterable 的所有元素都为真(或者如果可迭代为空),则返回  True 3.any() 如果 iterable 的任何元素为真,则返回  True .如果iterable为空,则返回  False 4.callable() 如果  object 参数出现可调,则返回  True ,否则返回  Fal

Python基础之内置函数(二)

先上一张图,python中内置函数: python官方解释在这:点我点我 继续聊内置函数: callable(object):检查对象是否可被调用,或是否可执行,结果为bool值 def f1(): pass f2 = 123 print(callable(f1)) print(callable(f2)) out: True False char(): ord(): 这两个一起讲,都是对应ASCii表的,char(obect)将十进制数字转化为ascii中对应的字母,ord(object)将字母

JavaScript 精粹 基础 进阶(6)函数和作用域(函数、this)

转载请注明出处 原文连接 http://blog.huanghanlian.com/article/5b698ef6b8ea642ea9213f4e 函数是一块JavaScript代码,被定义一次,但可执行调用多次,js中的函数也是对象,所以js函数可以像其他对象那样操作和传递所以我们也常叫js中的函数为函数对象. 函数概述 函数的构成主要有几个部分函数名,参数列表,函数体 function foo(x, y) { if (typeof x === 'number' && typeof y

python基础(3):函数对象、函数嵌套、名称空间与作用域、装饰器

函数对象 函数嵌套 名称空间与作用域 闭包函数 装饰器 练习 一 函数对象 #1 可以被引用 def max(x, y): return x if x > y else y func = max print(func(1, 2)) #2 可以当作参数传递 def max(x, y): return x if x > y else y def max_1(x, func): return func(x, 1) print(max_1(2, max)) #3 返回值可以是函数 #4 可以当作容器类