python语法基础-函数-长期维护

###############    函数的定义调用,返回值和返回值接收    ##############

def mylen():
    s = "myname"
    i = 0
    for item in s:
        i += 1
    return i

def func():
    return {"name":"andy"},[1,2,3]

l = mylen()
print(func())

# 从这个例子可以学到几个:函数的定义,函数的调用,函数的返回值,

# 关于返回值有几种情况:
# 1是没有返回值,如果不写return,或者只写return,都是没有返回值的,只要执行了return就不会往后执行了,比如列表的append,没有返回值,
# 2是有一个返回值,可以返回一个列表,可以返回一个字典,return [1,2,3,4]   return {name : andy}
# 3是有多个返回值,return 1,2   多个参数使用逗号分隔,
# 接收的时候可以使用一个变量接收,这个时候是一个元组的类型,
# 也可以使用使用两个参数接收,但是不能使用三个变量接收,会报错

###############    函数参数,形参实参,无参数,默认参数,不定长参数,调用使用位置参数,关键字参数,    ##############

########################
# 这种没有参数
def hollo1():
    print(‘hello world‘)
hollo1()

###################
# 这是必需参数
def hollo2(name):
    print(‘hello world‘)
    print(name,‘在唱歌...‘)
hollo2(‘andy‘)

#######################
def hollo3(age,name):
    print(‘hello world‘)
    print(‘我今年%d岁了‘%age)
    print(name,‘在唱歌...‘)
hollo3(name=‘andy‘,age=18)
# 这种函数调用的时候就使用了关键字参数,这样就可以不用管参数的顺序了,默认是位置参数,
# 位置参数和关键字参数,可以混用,但是要注意位置,
##########################
# 有了默认参数之后,调用函数的时候,这个参数可以不写,则使用默认值,
def hollo3(age,name=‘andy‘):  # 定义参数的时候,必须先定义位置参数,最后定义默认参数,默认参数也叫做关键字参数,
    print(‘hello world‘)
    print(‘我今年%d岁了‘%age)
    print(name,‘在唱歌...‘)
hollo3(age=18)

#############################
# 不定长参数,或者叫做动态参数
# 1,加了星号 * 的参数会以元组(tuple)的形式导入,加了两个星号 ** 的参数会以字典的形式导入。然后就可以像处理元组和字典一样处理参数了,
# 2,为什么会有这两种,就是一种位置参数,一种关键字参数,**kwargs就是用来接收关键字参数的,*args就是接收位置参数的,
# 3,先后顺序:必须先定义args,然后定义kwargs,如果有关键字参数一定放在kwargs之前,
# 4,参数名加星就可以了,后面的args,不是必须是这个,但是星一定要有,一般使用args,这是一种编码习惯,
def hollo3(name,*args,**kwargs):
    print(‘hello world‘)
    print(name,‘在唱歌...‘)
    print(args)   # (60,70) # 这是返回一个元组
    print(kwargs)  # {‘a‘: 1, ‘b‘: 2} 这是一个字典,

hollo3(‘andy‘,60,70,a=1,b=2)
# 如果是把一个列表一个一个的传进入
list1=[1,2,3,4]
hollo3(*list1)
# 如果是把一个字典一个一个的传进入
dict1={"name":"andy","age":1}
hollo3(**dict1)

###############    函数的命名空间和作用域    ##############

"""

# 函数进阶

命名空间和作用域

命名空间
全局命名空间——我们自己写的非函数中的代码
    是在程序从上到下被执行的过程中依次加载进内存的,
    放置了我们设置的所有的变量名和函数名,

局部命名空间,——函数
    就是函数内部定义的名字
    在函数调用的时候才会产生这个命名空间,随着函数调用的结束,这个命名空间就消失了,

内置命名空间,——Python解释器,
    就是Python解释器一启动就可以使用的名字,存储在内置的命名空间中,比如print,input,list等,
    内置的名字,在启动解释器的时候就会加载进去内存中,

在全局我们可以使用内置的明明靠空间,但是不能使用局部的,
在局部我们可以使用全局的,内置的命名空间,
在内置的里面不能使用全局的和局部的,

所以就像是一个套娃一样,最外层是内置的,然后是全局的,然后是局部的,

如果我们定义在全局定义了和内置的函数同名的名字,会使用全局的,

"""

def input():
    print(123)

def func():
    # input=1
    print(input)

func()

"""
作用域

作用域和命名空间是分不开的,

作用域有两种,
1,全局作用域,内置和全局的命名空间,都是全局作用域,
2,局部作用域,我们现在就知道一个局部,就是函数,

对于不可变类型,你可以在局部查看全局的变量,但是不能修改,如果要修改,你就需要使用global进行声明,
自己的代码中应该尽量少使用global,这样会导致代码非常不安全,混乱,
"""

a =1

# def func():
#     global a
#     a += 1
# func()
# print(a)

def func(a):
    a += 1
    return a
# 不使用global,可以使用另一种方法
a = func(a)
print(a)  # 2

"""
globals
locals

"""
a =1
b = 2
def func():
    x = "aaa"
    y = "bbb"
    print(locals())  # 会打印出所有的局部变量的名字和值,  {‘y‘: ‘bbb‘, ‘x‘: ‘aaa‘}
    print(globals())  # 这个还是全局的,

func()
print(globals())  # 会打印出所有全局的名字,和内置的变量的名字,然后是函数名,
print(locals())  # print(globals()),这个打印出的本地和全局是一样的,

###############    函数的嵌套调用,函数的嵌套定义    ##############

# 函数的嵌套调用

# 两个数判断最大值
def max(a,b):
    return a if a>b else b  # 三元运算,a大于b,就是a,否则就是b,

# 三个数判断最大值,先判断两个,然后再判断和第三个,
def the_max(x,y,z):
    c = max(x,y)  # 这就是函数的嵌套调用,
    return max(c,z)

# 函数的嵌套定义,
# nonlocal 找离当前函数最近的一个局部变量,只会影响最近的一层,不能是全局变量,
def outer():
    a = 1
    def innner():
        print(123,)
        def innner2():
            nonlocal a
            a += 1
            print(a)
        innner2()
    innner()  # 一定要有这一句,否则内部定义的函数,不会生效,

outer()

# 函数名就是一个内存地址,
# 1,函数名可以赋值
# 2,函数名可以作为容器类型的元素,
# 3,函数可以作为参数调用,# 函数可以作为参数调用,
def func1():
    print(123)
func2=func1  # 函数名可以赋值

func2()

list1=[func1,func2]  # 函数名可以作为容器类型的元素,

def func3(func1):  # 函数可以作为参数调用,
    func1()
    return func1  # 函数名可以作为函数的返回值,

###############    函数的闭包    ##############

# 闭包

def outer():
    a = 1
    def inner():
        print(a)
    inner()
outer()
outer()
outer()
# 这种写法比较浪费资源,每次都要生成a变量,
# 闭包的定义,就是一个嵌套函数,并且内部函数调用外部函数的变量,如果你调用外部函数的变量,就不是一个闭包,

# 闭包最常用的形式是在函数中返回内部函数,

def outer():
    a = 1
    def inner():
        print(a)
    print(inner.__closure__)  # (<cell at 0x0000000009C68FA8: int object at 0x000000005EA960A0>,),有cell就是一个闭包,
    return inner  # 在外部函数中返回内部函数的名字,这就是一个闭包最常用的方式,

inn = outer()
inn()
inn()
inn()
inn()  # 这种写法我调用这个函数100次,但是里面的a变量就只会生成一次了,不会反复生成了,节省资源,

###############    函数的定义及四种参数    ##############

###############    函数的定义及四种参数    ##############

###############    函数的定义及四种参数    ##############

###############    函数的定义及四种参数    ##############

###############    函数的定义及四种参数    ##############

原文地址:https://www.cnblogs.com/andy0816/p/12231985.html

时间: 2024-08-30 09:28:14

python语法基础-函数-长期维护的相关文章

python语法基础-函数-进阶-长期维护

###############    函数的命名空间和作用域    ############## """ # 函数进阶 命名空间和作用域 命名空间 全局命名空间——我们自己写的非函数中的代码 是在程序从上到下被执行的过程中依次加载进内存的, 放置了我们设置的所有的变量名和函数名, 局部命名空间,——函数 就是函数内部定义的名字 在函数调用的时候才会产生这个命名空间,随着函数调用的结束,这个命名空间就消失了, 内置命名空间,——Python解释器, 就是Python解释器一启动

python语法基础-函数-装饰器-长期维护

###############    装饰器的初成和开放封闭原则    ############## # 装饰器 # 装饰器非常重要,面试Python的公司必问, # 原则:开放封闭原则 # # 需求:计算程序执行的时间, import time def func(): start = time.time() time.sleep(0.01) print(123) end = time.time() print(end-start) func() # 这种写法如果有100个函数,你都要加一遍这是

Python-12:Python语法基础-函数

1.函数 function,通俗来讲函数就是功能,函数是用来封装功能的,函数分为两种类型,一种是系统自带的不用我们编写就可以使用的.另一种函数是自定义的,需要我们编写其功能,这种函数自由度高,叫做自定义函数. #encoding:utf-8 #系统自带的函数 #实现取字符串长度的功能 a="hello,jiyongxin" print len(a) #15 #实现字符串的切割 a="student" b=a.split("u") print b

python语法基础-面向对象-基础-长期维护

###############    类的基本操作    ############## """ 类的基本认识: 1,类就是一个模子 2,dict,list都是类,具体的一个字典和列表就是一个类的实例,就是对象, 3,类定义的时候,类名后面可以有括号,也可以没有括号, 4,类传参是通过__init__方法来传参的,只要实例化一个对象,就会调用这个方法, 5,一个类有三要素:类名,属性,方法,类名要大写,类名使用大驼峰命名法, 6,self代表类的实例,必须要有,名字不必须是se

python语法基础-面向对象-进阶-长期维护

###############    @property定义属性    ############## # 所以对于定义属性你有好几种方式了和种类了,# 静态属性,动态属性, # property # 内置装饰器函数 只在面向对象中使用 # 注意: # 1,不能传递任何的参数, from math import pi class Circle: def __init__(self,r): self.r = r @property def perimeter(self): # 不能传递任何的参数,周

python语法基础-并发编程-线程-长期维护

###############   线程和GIL,全局解释器锁    ############## """ 线程 为什么会有进程? 主要是能够同时处理多个任务,多个任务还要进行切换,时间片轮转 为什么会有线程? 进程并不是执行任务的最小单元,每一个进程里面有都一个线程,我们叫做主线程, 早期没有线程,一个进程只能干一个任务,如果有多个任务,只能多起进程,进程太多不行的, 进程内部的内存是共享的,所以需要线程,否则还要涉及到进程间的通信,这比较浪费资源 所以线程的出现解决了两个

python语法基础-异常操作-长期维护

###############    python-异常的操作  ############### # 异常:python解释器遇到一个错误,会停止程序的执行,并且提示错误信息,这就是异常, # 抛出异常:python停止程序,提示错误,这就是抛出异常 # 捕获异常: # 捕获异常的语法: # try: # 尝试执行的代码 # except: # 出现错误的处理 try: num=int(input('请输入一个整数:')) except: print('请输入正确的整数') print('---

python语法基础-文件操作-长期维护

###############    python-简单的文件操作  ############### # python中文件的操作 # 文件操作的基本套路 # 1,打开文件,默认是是只读方式打开文件 # 2,读写文件,默认是从文件的开始读取数据,也就是读取文件的所有内容 # 3,关闭文件,文件必须要关闭,否则会造成系统资源消耗,而且户影响后续会文件的访问 # 常用方法: # open # write # read # close # readline,这个什么时候用, # 文件打开方式: # 语

python语法基础-并发编程-进程-长期维护

###############    进程的启动方式1    ############## """ 并发编程: 进程 1,运行中的程序,就是进程,程序是没有生命的实体,运行起来了就有生命了, 操作系统可以管理进程,进程是操作系统基本的执行单元, 2,每一个进程都有它自己的地址空间,进程之间是不会混的,比如qq不能访问微信的地址空间, 操作系统替你隔离开了,这也是操作系统引入进程这个概念的原因, ####################################### 进