python小tips

函数:

格式:

def 函数的名字():函数体例如:def playgame():print("I am playing!")函数调用:
playgame()

     调用的方法: 函数名()     

函数的定义只是定义函数,调用了才会有结果     

函数的参数

分类:1.形参:在函数定义的时候,需要准备一些变量来接收信息1.位置参数,按照位置一个一个声明变量2.默认值参数,在函数声明的时候给变量一个默认值,如果实参不传递信息,此时默认值生效,否则就不生效
def luru(name, age, gender="男"):print(name, age, gender)luru("张三", 18)    # 张三 18 男
luru("李四", 18)
luru("王二麻子", 18)
luru("赵敏", 18, "女")    # 赵敏 18 女
luru("周芷若", 18, "女")
luru("吴老二", 18)
       3.动态传参1. * 参数名(args) 表示接收所有的位置参数的动态传参,接收到的值被统一放在元组里2. ** 参数名(kwargs) 表示接收所有的关键字的动态传参,接收到的值统一放在字典里
def chi(*food):   # * 表示位置参数的动态传参,*接收到的值会被统一放在一个元组里面print(food)chi('大米饭', "烧茄子",  "紫菜蛋花汤")   # ('大米饭', '烧茄子', '紫菜蛋花汤')
chi("大米饭")   # ('大米饭',)# 关键字参数的动态接收
def chi(**food):  # ** 表示接收关键字的动态传参,接收到的所有参数都会被处理成字典print(food)chi(zhu="小米饭", tang="胡辣汤", )  # {'zhu': '小米饭', 'tang': '胡辣汤'}
        混合使用的顺序:位置参数  >  *args  > 默认值  > **kwargs上述参数可以随意搭配使用;位置参数 在 默认值参数之前2.实参:实际调用的时候传递信息1.位置参数,按照位置进行参数传递2.关键字参数,按照参数的名字进行传递参数
def chi(zhu, fu, tang, tian):print(zhu, fu, tang, tian)chi("大米饭", '西红柿炒鸡蛋', "紫菜蛋花汤", "哈根达斯")          # 位置参数chi(zhu="小米饭", tang="胡辣汤", fu="西红柿炒鸡蛋", tian="老冰棍")    # 关键字参数chi("小米饭","胡辣汤", tang="西红柿炒鸡蛋", tian="老冰棍")   # 混合参数
        3.混合参数 (位置参数放前面,关键字参数放后面---> 否则报错)实参在执行的时候,必须保障形参有数据
open(xxxx,mode="xx",encoding="xxxx")  # xxxx是文件名,这个就是混合参数
        * 在实参位置,是把列表打散成位置参数进行传递** 在实参位置,可以把字典自动转化成关键字参数进行传递
def func(*args):print(args)# list少量元素
func(stu_lst[0], stu_lst[1], stu_lst[2], stu_lst[3],)   # ('流川枫', '樱木', '大老王', '隔壁二老王')# list 大量元素
func(*stu_lst)   # * 在实参位置,是把列表打散成位置参数进行传递# ** 在实参位置,可以把字典自动转化成关键字参数进行传递
# ('流川枫', '樱木', '大老王', '隔壁二老王')

      
返回值

返回值:函数执行之后,会给调用方一个结果,这个结果就是返回值关于return:
函数只要执行到了return,函数就会立即停止并返回内容,函数内的return后续代码不会执行
def func(a, b):# print(a + b)return a + bret = func(10, 30)
print( ret * 3)     # 90# 不写return
def func():passret = func()print(ret)   # None# 写了return但没有返回值
def fun():print(1223)return   # 不管return有没有返回值,只要读到return就会让程序停止,后续代码不会执行,有点像循环里的breakprint(234)ret = fun()
print(ret)     # 1223   None
1.如果函数里没有return,此时函数收到的是什么?   默认收到的时None
2.如果写了return1.只写了return 后面不跟数据             (充当的break情况)2.return 值,此时表示函数有一个返回值,外界能收到一个数据  (用的最多)3.return 值1,值2,值3....  此时函数有多个返回值,外界收到的是什么呢     外界收到的是元组,且该元组内存放所有返回值

内置函数(上)

内置函数: 直接拿来用的函数 例:print, input和数学运算相关数据类型: bool、 int、 float、 complex(复数)进制转换:bin(二进制)、oct(八进制), int(十进制),hex(十六进制)数学运算:sum, min, max, pow(次方)
# 进制
a = 18
print(bin(a))   # 0b10010   二进制
print(oct(a))   # 0o22    八进制
print(hex(a))    # 0x12    十六进制b = 0b10011
print(int(b))   # 19  二进制转十进制# 数学运算
#  pow
c = 10
d = 3
print(pow(c, d))   # 1000
print(c ** d)    # 1000  表示的也是次方# max , min , sum
lst = [12, 32, 57, 789, 1000]
print(max(lst))   # 1000
print(min(lst))   # 12
print(sum(lst))   # 1890
    和数据结构相关列表和元组: list, tuple相关内置函数:slice(切片)字符串:str,format,bytes,ord(把文字转化成unicode编码中的码位), chr(把unicode编码的码位转化为文字), repr相关内置函数:len, enumerate(能够直接拿到索引和元素), all(当作and看), any(当作or看),     zip, filter, map, sorted,
# 列表
s = {1, 3, 4}
lst = list("呵呵哒")   # list 内部有个for循环
print(lst)    # [1, 3, 4]   ['呵', '呵', '哒']
# list的原理
for item in s:lst.append(item)
lst = list("呵呵哒")
print(lst)  # ['呵', '呵', '哒']s = slice(1, 4, 3)  # [1: 4:3]  从1切到4,每3个出来一个
print("呵呵呵呵呵呵"[s])  # 呵# format, ord, chr
# format  格式化
a = 18
print(format(a, "b"))   # 二进制 10010print(format(a, "08b"))   # 需要一个由0补充的8位的二进制   00010010    只能补齐,不能切割
c = 12000
print(format(c, "08b"))   # 10111011100000print(format(a, "o"))   # 八进制 22
print(format(a, "x"))    # 十六进制 12# ord, chr
a = '中'   # python的内存是unicode
print(ord(a))  # 20013   “中”在unicode中码位是20013
print(chr(20013))   # 中   给出编码位置,展示出文字# enumerate, all, any,
# all, any
print(all([12, "呵呵", "豆沙包"]))    # 把all当作and来看   True
print(all([0, "呵呵", "豆沙包"]))    # False,有一个空就是false
print(any([0, "呵呵", "豆沙包"]))    # True  把any当作or来看
print(any([0, "", ""]))     # False,全是空就是falselst = ["张无忌", "张翠山", "张三丰","张大大"]for item in enumerate(lst):print(item)
'''
(0, '张无忌')
(1, '张翠山')
(2, '张三丰')
(3, '张大大')
'''
for index,item in enumerate(lst):print(index,item)
#   #  等价于下面
for i in range(len(lst)):print(i, lst[i])
'''
0 张无忌
1 张翠山
2 张三丰
3 张大大
'''
    其他id (字符串的内存地址)help()   dir() (告诉当前数据能执行的操作)print(dir(s))

python进阶

作用域

作用域:变量的访问权限全局变量:顶格写,全局作用域局部变量:内侧 ,局部作用域总结: 里面访问外面没问题,外面访问里面不能直接访问
def func():c = 199return c   # 想要在函数外面访问到函数里面的东西,必须要return,必须!c1 = func()   # 此时调用的func是c的值
print(c1)   # 199

函数的嵌套

结论(*):1.函数可以作为返回值进行返回2.函数可以作为参数进行相互传递函数实际上就是一个变量名,都表示一个内存地址
def fun1():passdef fun2():fun1()    # 这个叫函数的调用,不叫嵌套fun2()def func1():b = 20def func2():  # 函数的嵌套print(b)func2()  # 20 局部的东西,一般都是在局部自己访问使用的# func1内部的func2函数访问了局部变量b,并且在调用func1()时输出了20。# 外部无法直接访问b和func2,因为它们是在func1内部定义的局部变量和函数。
func1() # 20 这算直接调用func1()
print(func1())  # None
# 输出 None 是因为函数 func1 没有明确地返回任何值。在 Python 中,如果函数没有显式使用 return 语句返回一个值,它将默认返回 None。
print(b)      # 访问不了,外面没办法访问里面
print(func2)  # 访问不了,外面没办法访问里面# 函数嵌套执行过程
def func1():print(123)def func2():print(234)def func3():print(345)print(1)func3()print(2)print(3)func2()print(4)func1()
"""
只有调用了才会执行
123
3
234
1
345
2
4"""def func():def inner():print(123)print(inner)  # <function func.<locals>.inner at 0x000001C7CD54B520> 打印出来的是函数func的局部变量inner的地址return inner    # 返回的是函数,如果返回inner(),返回的是None,把函数当成一个变量进行返回b1 = func()   # b1是func的返回值,此时是b1内部的inner
print(b1)   # <function func.<locals>.inner at 0x000001A8F892B520>  和inner一样
b1()           # 123# 在外部调用局部变量
def an():print(123)an()   # 123bn = an  # 把an赋值给了bn
bn()   # 123 此时的bn()就是an()# 函数就是一个变量!# 代理模式
def func(an):# print(an)    # 传入func的变量,打印该变量本身an()   # 传入func的函数,执行该函数
# 实参可以是函数
def target():print("我是target")c = 123
func(c)   # 123   给func传变量c,调用func,输出123
func(target)   # <function target at 0x000001FDC715B520>  给func()传函数,调用func,返回的是传入函数的地址# 用的是  print(an)
func(target)    # 我是target     说明实参可以是函数

两个关键字global,nonlocal

global:在局部引入全局变量
nonlocal: 在局部,引入外层的局部变量
a = 10
def func():# 此时就想要在函数内部修改全局变量a,怎么办?global a   # 把外面的全局变量引入到局部a = 20  # 创建一个局部变量,并没有改变全局变量中的afunc()
print(a)   # 10 为什么还是10(按理说应该是20)?  只写了a = 20不行# 有了global a ,a的结果变成20   20def func():a = 10def func2():nonlocal a  # 向外找一层,看有没有该变量,如果有就引入,如果没有,继续向外扩一层,直到全局(不包括)a = 20func2()print(a)func()   # 10# 20   (nonlocal a)

闭包

闭包:本质:内层函数对外层函数的局部变量的使用,此时内层函数被称为闭包函数1. 可以让一个变量常驻于内存2. 避免全局变量被修改
def func():a = 10   # 把成员变量变成局部变量,将其保护起来def inner():nonlocal aa += 1return areturn inner     # 此时inner构成闭包函数ret = func()   # inner  ==> ret ==> 什么时候执行r1 = ret()
print(r1)   # 11r2 = ret()
print(r2)   # 12

装饰器

函数回顾:

1. 函数可以作为参数进行传递
2.  函数可以作为返回值进行返回
3. 函数名称可以当成变量一样进行赋值
# 1.函数可以作为参数传递
def func():print("我是函数")def gggg(fn):fn()gggg(func)   # 我是函数# 2.函数可以作为返回值进行返回
def func():def inner():print("123")return innerret = func()
ret()   # 123# 3.函数名称可以当成变量一样进行赋值
def func1():print("我是函数1")def func2():print("我是函数2")
func1 = func2
func1()   # 我是函数2
装饰器:  --> 要求记住最后的结论装饰器本质上是一个闭包作用:在不改变原有函数调用的情况下,给函数增加新功能直白:可以在函数前后添加新功能,但不改原代码应用: 在用户登录的地方,日志,通用装饰器写法:def wrapper(fn):     wrapper: 装饰器,fn:目标函数def inner(* args, **kwargs):# 在目标函数执行之前ret = fn(* args, **kwargs)            # 执行目标函数# 在目标函数执行之后return retreturn inner     # 千万不能加小括号@wrapperdef target():passtarget()   # ==> inner()一个函数可以被多个装饰器装饰@wrapper1@wrapper2def target():print('我是目标')target()作用顺序: wrapper1 wrapper2  target  wrapper2  wrapper1
def wrapper1(fn):  # fn: wrapper2.innerdef inner(*args, **kwargs):print("这里是wrapper1,进")   # 1ret = fn(*args,**kwargs)   #  调用 fn : wrapper2.innerprint("这里是wrapper1,出")   # 4return retreturn innerdef wrapper2(fn):   # fn : targetdef inner(*args, **kwargs):print("这里是wrapper2,进")   # 2ret = fn(*args,**kwargs)    # targetprint("这里是wrapper2,出")    # 4return retreturn inner@wrapper1  # target = wrapper1(wrapper2.inner) ==> target:wrapper1.inner
@wrapper2  # target = wrapper2(target)  此时的target是wrapper2的inner
def target():print('我是目标')target()wrapper1 wrapper2  target  wrapper2  wrapper1
"""
这里是wrapper1,进
这里是wrapper2,进
我是目标
这里是wrapper2,出
这里是wrapper1,出
"""

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/25537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat源码解析(八):一个请求的执行流程(附Tomcat整体总结)

Tomcat源码系列文章 Tomcat源码解析(一)&#xff1a;Tomcat整体架构 Tomcat源码解析(二)&#xff1a;Bootstrap和Catalina Tomcat源码解析(三)&#xff1a;LifeCycle生命周期管理 Tomcat源码解析(四)&#xff1a;StandardServer和StandardService Tomcat源码解析(五)&…

吴恩达神经网络学习笔记1

代码解释 并不是全部代码&#xff0c;思路的流程 import numpy as np# 如何判断咖啡豆是烤好了 # 假设此神经网络由2层构成###### 这部分代码只是如何建立2层网络&#xff0c; ###### 并不包含如何加载神经网络中的参数 w 和 b######################## 第1层网络# x 是…

浅谈什么是Google GKE?Auto Pilot模式是什么?

一、什么是GKE&#xff1f; 1、他是Google托管的Kubetnetes集群的名称。 2、底层实际还是一堆虚拟机&#xff0c;但这些虚拟机的生命周期不用你负责管理了&#xff0c;只需要管理Gke集群来运行你的工作负载。 1、你需要为这个集群配置Kubetnetes版本、网络、存储、节点等等。 2…

Ruoyi5.x RuoYi-Vue-Plus新建Translation翻译类

若依框架&#xff08;RuoYi&#xff09;中的Translation翻译类主要作用在于实现字段值的转换或翻译功能&#xff0c;以提高数据展示的准确性和友好性。以下是其具体作用的一些关键点&#xff1a; 字段值转换&#xff1a;若依框架在处理数据时&#xff0c;有时需要将某些字段的…

CrawlSpace爬虫部署框架介绍

CrawlSpace爬虫部署框架介绍 全新的爬虫部署框架&#xff0c;为了适应工作的爬虫部署的使用&#xff0c;需要自己开发一个在线编写爬虫及部署爬虫的框架&#xff0c;框架采用的是Django2.2bootstap依赖scrapyd开发的全新通用爬虫在线编辑部署及scrapy项目的部署框架。项目实现的…

读AI未来进行式笔记08自主57

1. 自主57 1.1. 自主57被视为继火药、核57之后的“第三次zhan筝革命” 1.2. 虽然地雷和导弹揭开了早期简单自主57的序幕&#xff0c;但运用了AI技术的真正的自主57才是正片 1.2.1. AI自主57让整个sha戮过程&#xff1a;搜寻目标、进入zhan斗、抹sha生命&#xff0c;完全无须…

60.线程安全的集合类

第一种&#xff1a; HashTable,Vector 底层使用的Synchronized加锁实现的&#xff0c;性能不高&#xff0c;不推荐。 第二种&#xff1a; 修饰的安全集合 SynchronizedMap,SynchronizedList&#xff0c;性能不高&#xff0c;不推荐。 第三种&#xff1a; J.U.C安全集合&am…

【Labview】通过串口通信从上位机读取和写入数据

最近博主需要通过Labview的上位机控制一个温控仪表&#xff0c;主要实现在上位机读取实时温度和设定的目标温度&#xff0c;以及通过上位机设定目标温度。这里将其中遇到的问题和心得分享给大家&#xff0c;博主自己也做一个记录。 由于温控仪表采用的485通讯&#xff0c;modb…

01-今日课程介绍

01-今日课程介绍 1.什么是微服务? 微服务技术就是SpringCloud技术吗? ​ 错!,微服务其实是分布式架构的一种,所谓分布式架构就是要把服务做拆分,而拆分的过程中其实会产生各种各样的问题需要去解决,而SpringCloud其实仅仅是解决了服务拆分时候的 服务治理 问题 。至于…

C语言——字符数组

一、字符数组的定义 语言字符数组的定义是指在C语言中可以使用一组连续的字符来存储和处理字符串。在定义字符数组时&#xff0c;需要指定数组的大小&#xff0c;并且可以初始化数组的内容。 1、字符数组方式&#xff1a; char str[] "Hello,world!";2、指针方式…

JavaScript 如何访问本地文件夹

在浏览器环境中的JavaScript&#xff08;通常指的是前端JavaScript&#xff09;由于安全限制&#xff0c;无法直接访问用户的本地文件或文件夹。这是为了防止恶意脚本访问并窃取用户的敏感数据。 但是&#xff0c;有几种方法可以间接地让用户选择并访问本地文件&#xff1a; 使…

最长最短单词【菜蛋题解】

输入1行句子&#xff08;不多于200个单词&#xff0c;每个单词长度不超过100&#xff09;&#xff0c;只包含字母、空格和逗号。单词有至少一个连续字母构成&#xff0c;空格和逗号都算是单词间的间隔。 是输出第1个最长的单词和第1个最短单词。 输入&#xff1a;一行句子 输…

目标检测数据集 - 垃圾桶满溢检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;垃圾桶满溢检测数据集&#xff0c;真实场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如城市道边垃圾桶满溢、小区垃圾桶满溢、社区垃圾桶满溢、农村道边垃圾桶满溢、垃圾集中处理点垃圾桶满溢、公园垃圾桶满溢数据等。数据集标注标签划分为…

springboot手动触发参数校验,service层调用参数校验

背景 入参校验一般是在控制层通过javax.validation.constraints包下的规则注解如NotNull结合Valid与Validated实现&#xff0c;但是有时候我们的方法不提供给controller调用&#xff0c;这时候就无法触发自动参数校验&#xff0c;为此我们可以在不更改校验代码的前提下手动触发…

c++ 里函数选择的优先级:普通函数、模板函数、万能引用,函数重载的常量左值引用、右值引用,编译器选择哪个执行呢?

看大师写的代码时&#xff0c;除了在类里定义了 copy 构造函数&#xff0c;移动构造函数&#xff0c;还定义了对形参采取万能引用的构造函数&#xff0c;因此有个疑问&#xff0c;这时候的构造函数优先级是什么样的呢&#xff1f;简化逻辑测试一下&#xff0c;如下图&#xff0…

简述 IP 数据包分包组包的过程

一&#xff0c;为什么要分包 当你传输数据大于1500的时候&#xff0c;就会触发分包&#xff0c;也就是为了让你的数据包能接受你发过来的数据&#xff0c;不然太大&#xff0c;也不分包&#xff0c;就一下全丢了&#xff0c;不要超过一千五的数据了&#xff0c;所以有分包也就…

【Vue】项目创建目录初始化

文章目录 vue-cli 建项目调整初始化目录结构 vue-cli 建项目 1.安装脚手架 (已安装) npm i vue/cli -g2.创建项目 vue create hm-shopping选项 Vue CLI v5.0.8 ? Please pick a preset:Default ([Vue 3] babel, eslint)Default ([Vue 2] babel, eslint) > Manually sel…

web开发之jQuery

探索jQuery&#xff1a;简化JavaScript开发的利器 在现代Web开发中&#xff0c;JavaScript是不可或缺的技术&#xff0c;而jQuery作为最流行的JavaScript库之一&#xff0c;极大地简化了JavaScript编程。本文将带你深入了解jQuery&#xff0c;包括其历史背景、核心功能、常见用…

new RegExp(Reg).test(value)无效

目录 前沿 问题分析 eval 函数 # 定义和用法 # 语法 # 浏览器支持 # 实例 使用eval函数 优化 拓展 —— 要么旅行&#xff0c;要么读书&#xff0c;身体和灵魂必须有一个在路上。 前沿 之前写过一篇正则表达式的基础&#xff1a;http://t.csdnimg.cn/45Da3 今天继…

K8s 集群高可用master节点ETCD全部挂掉如何恢复?

写在前面 博文内容涉及集群 ETCD 全部挂掉&#xff0c;通过备份文件恢复的操作 Demo理解不足小伙伴帮忙指正 &#x1f603;,生活加油 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#xff0c;眼前的风景已经和从前不一样了。——村上春…