当前位置: 首页 > news >正文

表白网站制作源码自助建站免费搭建个人网站

表白网站制作源码,自助建站免费搭建个人网站,自适应网站建设软件,濮阳市做网站公司函数 基本结构 def func_name(value):print(f"Hello {value}")return 0func_name("World")函数参数 参数默认值和五种参数类型 https://docs.python.org/3/glossary.html#term-parameter 参数默认值 带默认值的参数必须在参数列表右边 def func_nam…

函数

基本结构

def func_name(value):print(f"Hello {value}")return 0func_name("World")

函数参数

参数默认值和五种参数类型

https://docs.python.org/3/glossary.html#term-parameter

参数默认值

带默认值的参数必须在参数列表右边

def func_name(a, b=0):return a + bprint(func_name(1))

位置或关键字参数,positional-or-keyword argument

默认参数类型,传参的时候可以以位置或者关键字形式传递,但位置参数一定在左,关键字参数一定在右

# a、b均为位置或关键字参数,a以位置参数的形式传递,b以关键字参数的形式传递
def func_name(a, b):return a + bprint(func_name(1, b=2))

仅位置参数,positional-only argument

使用/用于限定其之前的参数为仅位置参数类型

# a、b均为位置参数,c为位置或关键字参数但以位置参数形式传入
def func_name(a, b, /, c):return a + b + cprint(func_name(1, 2, 3))

仅关键字参数,keyword-only argument

使用*用于限定其之后的参数为仅关键字参数类型

# a、b为位置或关键字参数但以位置参数传入,c为仅关键字参数
def func_name(a, b, *, c):return a + b + cprint(func_name(1, 2, c=3))

可变位置参数,var-positional argument

a、b为仅位置参数,args为可变位置参数,*args将多余的位置参数装包为元组args,args命名任意,习惯上以args作为可变位置参数名

def func_name(a, b, *args):print(a, b, args, type(args))  # 1 2 (3, 4, 5) <class 'tuple'>func_name(1, 2, 3, 4, 5)

可变关键字参数,var-keyword argument

a、b均为位置或关键字参数,但a、b传入形式不同,**kwargs将多余的关键字参数装包为字典kwargs,kwargs命名任意,习惯上以kwargs作为可变关键字参数名

def func_name(a, b, **kwargs):print(a, b, kwargs, type(kwargs))  # 1 2 {'c': 3, 'd': 4, 'f': 5} <class 'dict'>func_name(1, b=2, c=3, d=4, f=5)

注:

  1. 整体上,参数传入时必然以位置参数或关键字参数的形式传入,通常联合使用*args**kwargs接受任意参数

    def func_name(*args, **kwargs):print(args, kwargs)func_name(1, b=2, c=3, d=4, f=5)
    
  2. a、b为位置参数,c、d为位置或关键字参数,e、f为关键字参数

    def func_name(a, b, /, c, d, *, e, f):print(a, b, c, d, e, f)func_name(1, 2, 3, d=4, e=5, f=6)
    

函数返回值

Python基于元组的自动装包和拆包在语法上实现了多个返回值形式,实际仍为一个返回值

def func_name(a, b):return a, ba, b = func_name(1, 1)
print(a, b)  # 1 1r = func_name(1, 1)
print(r, type(r))  # (1, 1) <class 'tuple'>

Python函数返回值默认为None,不存在没有返回值的情况

def func_name1():return
print(func_name1())  # Nonedef func_name2():pass
print(func_name2())  # None

匿名函数,lambda表达式

def pow2(n):return n ** 2
print(pow2(10))calc = lambda n: n ** 2
print(calc(10))add = lambda x, y: x + yl = [-2, 4, -9, 4, 7, 8]
print(max(l, key=lambda n: n * n))

闭包函数

  • 闭包函数必须有内嵌函数
  • 内嵌函数需要引用该嵌套函数上一级中的变量
  • 闭包函数必须返回内嵌函数
# 闭包函数通过将函数名作为返回值使得不释放局部变量引用而保留局部变量
# 具有环境变量n的函数power
def nth_power(a):n = a or 1def power(base):return base ** nreturn power_3power = nth_power(3)
print(_3power(2))  # 8

_closure_

def generate_func(start, end):def print_string(name):print(start, name, end)return print_stringhello = generate_func("Hello", "!")
hello('World')  # Hello World !
print(hello.__name__)  # print_string
print(hello.__closure__)  # (<cell at 0x00000215DB0E7E50: str object at 0x00007FF9311F9900>, <cell at 0x00000215DB0E7EE0: str object at 0x00000215DAD18AB0>)
print(hello.__closure__[0].cell_contents)  # !
print(hello.__closure__[1].cell_contents)  # Hello
print(id(hello))  # 2292892980448bye = generate_func("Bye", ".")
bye('World')  # Bye World .
print(bye.__name__)  # print_string
print(bye.__closure__)  # (<cell at 0x00000215DB0E7DF0: str object at 0x00007FF9311F9BD8>, <cell at 0x00000215DB0E7E20: str object at 0x00000215DACBB4F0>)
print(bye.__closure__[0].cell_contents)  # .
print(bye.__closure__[1].cell_contents)  # Bye
print(id(bye))  # 2292892978368

global

a = 1def f1():a = 2def f2():global aa = 3print(a)  # 全局变量a=3f2()print(a)  # 局部变量a=2f1()
print(a)  # 全局变量a=3

nonlocal

a = 1def f1():a = 2def f2():nonlocal aa = 3print(a)  # 全局变量a=3f2()print(a)  # 局部变量a=3f1()
print(a)  # 全局变量a=1

装饰器

import timedef outer(func):def inner(*args, **kwargs):t1 = time.perf_counter()res = func(*args, **kwargs)print(time.perf_counter() - t1)return resreturn innerdef add(a, b):time.sleep(1)return a + badd_plus = outer(add)
print(add_plus(1, 2))
# 1.0007887999818195
# 3@outer
def sub(a, b):time.sleep(1)return a - bprint(sub(1, 2))
# 1.000871800002642
# -1
# 装饰器标准模板
# 装饰器函数\装饰器类,以函数作为装饰器\以类作为装饰器
def wrapper():def outer(func):def inner(*args, **kwargs):res = func(*args, **kwargs)return resreturn innerreturn outer@wrapper()
def func_wrapped():passfunc_wrapped()

无参装饰器

# 无参装饰器
def debug(func):def wrapper(*args):print("[DEBUG]: function {}".format(func.__name__))return func(*args)return wrapper@debug
def add(a, b):return a + badd(1, 2)
# [DEBUG]: function add

有参装饰器

# 有参装饰器
def logging(level):def outer_wrapper(func):def inner_wrapper(*args, **kwargs):  # 参数在此print("[{}]: function {}".format(level, func.__name__))return func(*args, **kwargs)return inner_wrapperreturn outer_wrapper# @logging(level="DEBUG")相当于先调用函数outer_wrapper=logging(level="DEBUG")得到@outer_wrapper
# @outer_wrapper相当于inner_wrapper=outer_wrapper(func)
# 最终执行inner_wrapper
@logging(level="DEBUG")
def add(a, b, *args):res = a + bfor i in args:res += ireturn resprint(add(1, 2, 3, 4))
# [DEBUG]: function add
# 10

多重装饰器

自上而下,自下而上

def wrapper1(func):def inner1():print("inner1 before")func()print("inner1 after")return inner1def wrapper2(func):def inner2():print("inner2 before")func()print("inner2 after")return inner2def wrapper3(func):def inner3():print("inner3 before")func()print("inner3 after")return inner3@wrapper1
@wrapper2
@wrapper3
def do():print("fun")do()
# inner1 before
# inner2 before
# inner3 before
# fun
# inner3 after
# inner2 after
# inner1 after

生成器,generator

  • 生成器函数 生成器表达式

  • 含有yield关键字的函数为生成器函数,yield不可与return共用

def generator():a = '123456'for i in a:  # 一般写法yield iyield from a  # 简写g = generator()
for i in g:print(i)
# 1
# 2
# 3
# 4
# 5
# 6
# 1
# 2
# 3
# 4
# 5
# 6

不给生成器传参

def generator():print("generator1")yield 'a'print("generator2")yield 'b'result = generator()
print(result)
print(result.__next__())  # a
print(result.__next__())  # b
# print(result.__next__())  # StopIteration# 生成器只能遍历一遍元素,获取完毕之后必须重新new
# 而对于列表来说,可以使用for i in l: print(i)遍历多次,但是生成器会报异常

给生成器传参

def generator():print(1)content = yield 'a'print(2, content)content = yield 'b'print(3, content)yieldg = generator()
print(g.__next__())
print(g.send("content1"))  # 需要给上一个yield位置传参,第一个需要用__next__,同理最后一个yield无法获取到值,不过可以yield空
print(g.send("content2"))
# 1
# a
# 2 content1
# b
# 3 content2
# None
def tractor():"""拖拉机@return:"""distance = 0second = 0avg_speed = 0while True:d, t = yield avg_speeddistance += dsecond += tavg_speed = distance / secondavg = tractor()
print(avg.__next__())  # 0 摇车,人力启动柴油机
print(avg.send((10, 1)))  # 10.0
print(avg.send((12, 0.5)))  # 14.666666666666666
print(avg.send((10, 1)))  # 12.8

生成器嵌套

def generator():for i in range(4):yield ig = generator()
g1 = (i for i in g)
print(g1, type(g1))
g2 = (i for i in g1)
print(g2, type(g2))
# print(list(g)) # 若此处注释打开你猜会如何
print(list(g1))  # [0, 1, 2, 3]
print(list(g2))  # [] 因为执行的时候g1只是一个能产生[0, 1, 2, 3]的迭代器,并不同于值本身
def add(a, b):return a + bdef nums():for i in range(4):yield ig = nums()
for a in [1, 10]:g = (add(a, b) for b in g)  # 生成器表达式,不实际取元素的时候是不会列出元素的
print(list(g))  # [20, 21, 22, 23]print(list((add(1, b) for b in nums())))  # [1, 2, 3, 4]
print(list((add(10, b) for b in nums())))  # [10, 11, 12, 13]
print(list((add(10, b) for b in (add(1, b) for b in nums()))))  # [11, 12, 13, 14]
print(list((add(10, b) for b in (add(10, b) for b in nums()))))  # [20, 21, 22, 23] 等价,a的值在list时才
http://www.dinnco.com/news/37068.html

相关文章:

  • 网站外链有什么用免费域名解析平台
  • 桂林网站制作报价最新军事新闻 今日 最新消息
  • 浙江省城乡与住房建设部网站推广软文范例100字
  • 做网站还要什么认证吗站长统计入口
  • cdr 做网站页面做运营的具体做什么
  • 太原做网站多少钱2023今日新闻头条
  • 建什么网站好网店培训机构
  • 前端可以自己做网站么app推广工作是做什么的
  • php动态网站作业网站建设方案内容
  • 游戏推广员是做什么的网站seo优化案例
  • python改写WORDPRESS排名seo公司
  • dw做的网站怎样做成手机版的百度导航怎么下载
  • 昆明网站建设创意今天的新闻头条最新消息
  • 潍坊网站关键字优化网络推广营销策划方案
  • 怎么做下载类网站站内seo优化
  • 电影网站开发api大数据分析
  • 网站开发项目报价方案免费网站java源码大全
  • 营销活动策划方案模板来宾网站seo
  • 中国万网官网首页厦门零基础学seo
  • 中国建设银行徐州分行网站网络营销的真实案例分析
  • 新手写作网站百度网盘搜索引擎入口
  • 网站怎么做全屏滚动条搜索引擎优化特点
  • 有做车身拉花的网站吗网站开发语言
  • app要有网站做基础石家庄最新疫情最新消息
  • 用网站制作自己app软件seo有什么作用
  • 什么网站可以做高数新手网络推广怎么干
  • 做网站 属于电子商务b2b商务平台
  • 做私服网站犯法吗图片外链生成
  • 网网站制作互联网公司排名100强
  • 东莞常平做网站万网域名注册官网阿里云