暂时未有相关云产品技术能力~
前端开发攻城狮 &&大二学生
使用 lambda 关键字定义的函数就是匿名函数 lambda 参数列表:表达式 1、无参数无返回值 def 函数名(): 函数代码 lambda:函数代码 2、无参数有返回值 def 函数名(): return 1 + 2 lambda: 1 + 2 3、有参数无返回值 def 函数名(a, b): print(a, b) lambda a, b: print(a, b) 4、有参数有返回值 def 函数名(a, b): return a +
一、函数 1、两种输出的小数位控制 # num = 10 # # # def anum(): # num = 20 # print(num) # # # anum() num = 3.14 print("%.3f" % num) # f"{变量:.nf}" print(f"{num:.3f}") # 3.140 num1 = 1 # 00000001 print('%6d' % num1) print('%06d' % num1) # 000001 print(f'{num1:06d}') # 000001 2、递归 (1)求和
3、类型的可变与不可变 # int float bool str list tuple dict # 不可变类型: int float bool str tuple # 可变类型: list dict # num = 10 # num = 20 # # my_list = [1, 2] # my_list.append(3) a = 1000 b = 1000 print(id(a), id(b)) # python中的内存优化,对于不可变类型进行的, print(id(a) == id(b)) a = 'hello' b = 'hello' print(id(a),
二、拆包 1、组包与拆包 # 组包,将多个数据值,组成元组,给到一个变量 a = 1, 2, 3 print(a) # (1, 2, 3) def func(): return 1, 2 # 组包 # 拆包:将容器的数据分别给到多个变量,需要注意:数据的个数和变量的个数要保持一致 b, c, d = a # 拆包 把a的值分别给了b,c,d print(b,c,d) e,f = func() print(e,f) # 1 2 my_list = [10,20] a,b = my_list print(a, b) # 10 20 my_dict = {'n
一、函数传参的四类参数 1、位置传参与关键字传参 def func(a, b, c): print(f'a:{a}') print(f'b:{b}') print(f'c:{c}') # 位置传参 func(1,2,3) # func(3,1,2) # 关键字传参 func(a=10, b=20, c=30) # func(c=10, a=20, b=30) # 混合使用, 先写位置传参,再写关键字传参 '''先写没等号的,再写有等号的,有等号的要在后边''' func(10, b=20, c=30) # func(a=10, 20, 30) #
8、函数的嵌套作用 def func1(): print('func1 start ... ') print('函数的其他代码') print('func1 end ...') def func2(): print('func2 start ....') func1() # 函数调用 print('func2 end....') # 调用func1() # func1() # 调用func2() func2() ''' func2 start .... func1 start ... 函数的其他代码 func1 end ...
4、局部变量 def func(): # 定义局部变量 num = 100 print(num) def func1(): # 定义局部变量 num = 200 # 两个num是没有任何关系的 print(num) # 函数调用 func() func1() # 探究:局部变量能否在函数外部使用 # print(num) # 代码报错,局部变量不能在函数外部访问 5、全局变量 (globe) globe方法:可以让局部变量在全局变量中使用,放在修改之前,(类似定义) globe 变量名 # 定义全局变量
二、enumerate 自动生成一个整体 ,把列表的下标和元素值作为一个元组整体 my_list = ['a', 'b', 'c', 'd', 'e'] for i in my_list : print(i) ''' a b c d e ''' for i in my_list : print(my_list.index(i), i) # 得到的是下标和数据值 ''' 0 a 1 b 2 c 3 d 4 e ''' # enumerate 将可迭代序列中的元素所在的下标和具体元素数据组合在一起,变成元组 for j in enumerate(my_list):
一、字典 1、定义与访问 ''' 字典 dict 定义使用{} 定义,是由键值对组成(key_value) 变量 = {key1: value, key2: value2,...} 一个key:value 键值对是一个元素 字典中的key 可以是字符串类型和数字类型(int ,float) 不能是 列表类型的 value 值是可以存放任意类型的 ''' # 1、定义空字典 my_dict = {} my_dict1 = dict() print(my_dict) # {} print(my_dict1) # {} # 2、定义带数据的字典 my_dict2 = {'name':
三、元组 my_list = [18, 3.14, True, 'isaac'] # 列表 my_tuple = (18, 3.14, True, 'isaac') # 元组 print(my_tuple, type(my_tuple )) # (18, 3.14, True, 'isaac') <class 'tuple'> # 元组支持下标和切片 print(my_tuple[1]) # 3.14 # 定义空元组,没有意义 my_tuple1 = () print(my_tuple1, type(my_tuple1 )) # () <class 'tup
二、列表 1、定义 # 列表: 是Python中的一种数据类型,可以存放多个数据,列表中的数据可以是任意类型的 # 列表list ,定义使用[] 进行定义 # 定义空列表 my_list = [] my_list1 = list() print(my_list ,type(my_list)) # [] <class 'list'> print(my_list1 ,type(my_list1)) # [] <class 'list'> # 定义带数据的列表数据元素之间使用逗号隔开 my_list2 = [1, 3.24, True, "IT"] # 在计算中布尔表达式的true代表
一、字符串 1、定义 # 单引号 name = "isaac" print(type(name),name) # 双引号 name = "isaac" print(type(name),name) # 三引号 my_str = """hello world hello python! """ print(type(my_str),my_str) # <class 'str'> hello world # hello python! my_str = '''aaa b
九、运算符 可以在控制台进行运算 算术运算符 + - * / // 整除(求商) % 取余数 ** 指数,幂运算 () 可以改变优先级 赋值运算符 = 将等号右边的结果赋值给等号左边的变量 等号左边,必须是变量,不能是具体的数字 符合赋值运算符 = 将等号右边的结果赋值给等号左边的变量 等号左边,必须是变量,不能是具体的数字 比较运算符 逻辑运算符 与Java差距很大,Java用的是&& || 之类的,不想Python这样,直接字如其意的,方便。 九、运算符 可以在控制台进行运算 算术运算符 + - * / // 整
六、输出 在Python中的输出使用print函数 # 基本输出 支持换行输出,将一行的字用两次print来输出,中间可以加东西。 而且Python提供了一种新的对变量输出的方法, 使用f和花括号。 age = 18 # 需求:输出 我的年龄是18岁 print("我的年龄是%d岁" % age) # 我的年龄是18岁 print(f"我的年龄是{age}岁") # 我的年龄是18岁 # 必须在前面有f(大小写都可以),这样才能用{} # Python3.6版本开始支持f-string,占位统一使用{}占位,填充的数据直接写在{}里面 print('输出') print(12)
六、输出 在Python中的输出使用print函数 # 基本输出 支持换行输出,将一行的字用两次print来输出,中间可以加东西。 而且Python提供了一种新的对变量输出的方法, 使用f和花括号。 age = 18 # 需求:输出 我的年龄是18岁 print("我的年龄是%d岁" % age) # 我的年龄是18岁 print(f"我的年龄是{age}岁") # 我的年龄是18岁 # 必须在前面有f(大小写都可以),这样才能用{} # Python3.6版本开始支持f-string,占位统一使用{}占位,填充的数据直接写在{}里面 print('输出') print(12
Life is short , you need Python! 人生苦短,我用Python!😜😝 一、在书写上, 1、Python不需要“;”做结尾 2、在输出语句中,可以用单引号也可以用双引号 print('hello world') 二、注释 单行注释是: # # 单行注释 ''' 多行注释 ''' """ 多行注释 """ 在注释方面,Python对空格有着很多的要求。 在单行注释上,需要在#号后面空一格,再书写内容。否则会有下划波浪线(但不影响程序的运行) 在多行注释中,需要三个单引号或三个双引号 并且注释都需要有下一行(就是保证注释的内容不在最后一行)
一、输出 height = 170.5 # 默认本来是几位,就显示几位 print(F"我的身高是{height}cm") # 我的身高是170.5cm # 指定小数位 2位小数 print(F"我的身高是{height:.2f}cm") # 我的身高是170.50cm # 指定小数位 3位小数 print(F"我的身高是{height:.3f}cm") # 我的身高是170.500cm 可以控制小数的位数,与Java不同,Java和c的float都只是单精度浮点数,而在Python中float代表的是小数。通过".2"的形式表示要有两位小数 name = "名之以
# 10、包装类 在JS中,除了直接创建原始值外,也可以创建原始值的对象 通过 new String() 可以创建String类型的对象 通过 new Number() 可以创建Number类型的对象 通过 new Boolean() 可以创建Boolean类型的对象 - 但是千万不要这么做 包装类: ## JS中一共有5个包装类 String --> 字符串包装为String对象 Number --> 数值包装为Number对象 Boolean --> 布尔值包装为Boolean对象 BigInt --> 大整数包装为BigInt对象 Symbol --> 符号包装为
# 8、Date Date - 在JS中所有的和时间相关的数据都由Date对象来表示 - 对象的方法: getFullYear() 获取4位年份 getMonth() 返当前日期的月份(0-11) getDate() 返回当前是几日 getDay() 返回当前日期是周几(0-6) 0表示周日 ...... ## getTime() 返回当前日期对象的时间戳 时间戳:自1970年1月1日0时0分0秒到当前时间所经历的毫秒数 计算机底层存储时间时,使用都是时间戳 Date.now() 获取当前的时间戳 ``` <s
# 3、对象的序列化 对象的序列化 - JS中的对象使用时都是存在于计算机的内存中的 - 序列化指将对象转换为一个可以存储的格式 **在JS中对象的序列化通常是一个对象转换为字符串(JSON字符串)** - 序列化的用途(对象转换为字符串有什么用): - 对象转换为字符串后,可以将字符串在不同的语言之间进行传递 甚至人可以直接对字符串进行读写操作,使得JS对象可以不同的语言之间传递 - 用途: 1. 作为数据交换的格式 2. 用来编写配置文字 - 如何进行序列化:
# 1、解构对象 数组中可以存储任意类型的数据,也可以存数组, 如果一个数组中的元素还是数组,则这个数组我们就称为是二维数组 解构对象,方便两数交换数值;可以反向赋值对象,数组 可以在解构的同时,进行声明 ```html <script> const arr = ["孙悟空", "猪八戒", "沙和尚"] let a, b, c // a = arr[0] // b = arr[1] // c = arr[2] ; [a,b,
# 20、bind函数 根据函数调用方式的不同,this的值也不同: 1. 以函数形式调用,this是window 2. 以方法形式调用,this是调用方法的对象 3. 构造函数中,this是新建的对象 4. 箭头函数没有自己的this,由外层作用域决定 5. 通过call和apply调用的函数,它们的第一个参数就是函数的this 6. 通过bind返回的函数,this由bind第一个参数决定(无法修改) bind() 是函数的方法,可以用来创建一个新的函数 - bind可以为新函数绑定this - bind可以为新函数绑定参数 箭头函数没有自身的this,它的this由外层作用域
# 19、可变参数 ## arguments - arguments是函数中又一个隐含参数 - arguments是一个类数组对象(伪数组) 和数组相似,**可以通过索引来读取元素**,也可以通过for循环变量,但是它不是一个数组对象,不能调用数组的方法 - arguments用来存储函数的实参, 无论用户是否定义形参,实参都会存储到arguments对象中 可以通过该对象直接访问实参 ```html <script> function fn(){ console.log(arguments[2])//读取
# 18、数组的方法 ## sort() - sort用来对数组进行排序(会对改变原数组) - sort默认会将数组升序排列 注意:sort默认会按照Unicode编码进行排序,所以如果直接通过sort对数字进行排序 可能会得到一个不正确的结果 - 参数: - 可以传递一个回调函数作为参数,通过回调函数来指定排序规则 (a, b) => a - b 升序排列 (a, b) => b - a 降序排列 ## forEach() - 用来遍历数组 - 它需要一个回调函数作为参数,这个回调函数会被调用多次 数组中有几个元素,回调函数就会调用几次 每次调
# 17、递归 递归 - 调用自身的函数称为递归函数 - 递归的作用和循环是基本一直 递归的核心思想就是将一个大的问题拆分为一个一个小的问题,小的问题解决了,大的问题也就解决了 编写递归函数, ## 一定要包含两个要件: 1.基线条件 —— 递归的终止条件 2.递归条件 —— 如何对问题进行拆分 递归的作用和循环是一致的,不同点在于,递归思路的比较清晰简洁,循环的执行性能比较好 在开发中,一般的问题都可以通过循环解决,也是尽量去使用循环,少用递归 只在一些使用循环解决比较麻烦的场景下,才使用递归 ```html <script> /
# 15、函数 创建一个函数,第一次调用时打印1,第二次调用打印2,以此类推 可以利用函数,来隐藏不希望被外部访问到的变量 ## 闭包: 闭包就是能访问到外部函数作用域中变量的函数 什么时候使用: 当我们需要隐藏一些不希望被别人访问的内容时就可以使用闭包 构成闭包的要件: 1. 函数的嵌套 2. 内部函数要引用外部函数中的变量 3. 内部函数要作为返回值返回 ```html <script> // let num = 0 // function fn(){ // num++ /
目前我们的函数只能过滤出数组中age属性小于18的对象, 我们希望过滤更加灵活: 比如:过滤数组中age大于18的对象 age大于60的对象 age大于n的对象 过滤数组中name为xxx的对象 过滤数组中的偶数 ... **一个函数的参数也可以是函数,** 如果将函数作为参数传递,那么我们就称这个函数为**回调函数**(callback) ```html <script> class Person { constructor(name,age){ this.name = name;
# 11、排序 思路一: ## 冒泡排序 9, 1, 3, 2, 8, 0, 5, 7, 6, 4 - 比较相邻的两个元素,然后根据大小来决定是否交换它们的位置 - 例子: 第一次排序:1, 3, 2, 8, 0, 5, 7, 6, 4, 9 第二次排序:1, 2, 3, 0, 5, 7, 6, 4, 8, 9 第三次排序:1, 2, 0, 3, 5, 6, 4, 7, 8, 9 ... 倒数第二次 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 - 这种排序方式,被称为冒泡排序,冒泡排序是最慢的排序方式, 数字少还可以凑合用,不适用于数据量较大的
# 9、数组的方法 ## push() - 向数组的末尾添加一个或多个元素,并返回新的长度 pop() - 删除并返回数组的最后一个元素 ## unshift() - 向数组的开头添加一个或多个元素,并返回新的长度 ## shift() - 删除并返回数组的第一个元素 ## splice() - 可以删除、插入、替换数组中的元素 - 参数: 1. 删除的起始位置 2. 删除的数量 3. 要插入的元素 - 返回值: - 返回被删除的元素 ## reverse() - 反转数组 ```html <script> let arr =
# 7、浅拷贝和深拷贝 ## 浅拷贝(shallow copy) - 通常对对象的拷贝都是浅拷贝 - 浅拷贝顾名思义,只对对象的浅层进行复制(只复制一层) - 如果对象中存储的数据是原始值,那么拷贝的深浅是不重要 - 浅拷贝只会对对象本身进行复制,不会复制对象中的属性(或元素) ## 深拷贝(deep copy) - 深拷贝指不仅复制对象本身,还复制对象中的属性和元素 - 因为性能问题,通常情况不太使用深拷贝 ```html <script> //创建一个数组 const arr = [{name:'孙悟空'},{name:'猪八戒'}]
# 5、对象的复制 ## indexOf() - 获取元素在数组中第一次出现的索引 - 参数: 1. 要查询的元素 2. 查询的起始位置 ## lastIndexOf() - 获取元素在数组中最后一次出现的位置 - 返回值: 找到了则返回元素的索引, 没有找到返回-1 ## join
# 4、数组的方法 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array ## Array.isArray() - 用来检查一个对象是否是数组 ## at() - 可以根据索引获取数组中的指定元素 - at可以接收负索引作为参数 ## concat() - 用来连接两个或多个数组 - 非破坏性方法,不会影响原数组,而是返回一个新的数组 ```html <script> console.log(Array.isArray({nam
# 1、简介 数组(Array) - 数组也是一种复合数据类型,在数组可以存储多个不同类型的数据 - 数组中存储的是有序的数据,数组中的每个数据都有一个唯一的索引 可以通过索引来操作获取数据 - 数组中存储的数据叫做元素 - 索引(index)是一组大于0的整数 - 创建数组 通过Array()来创建数组,也可以通过[]来创建数组 - 向数组中添加元素 语法: 数组[索引] = 元素 - 读取数组中的元素 语法: 数组[索引] - 如果读取了一个不存在的元素,不好报错而是返回undefined - length - 获取数组的长
## 14、旧类 早期JS中,直接通过函数来定义类 - 一个函数如果直接调用 xxx() 那么这个函数就是一个普通函数 - 一个函数如果通过new调用 new xxx() 那么这个函数就是一个够早函数 - 等价于: class Person{ } ```html <script> var Person = (function () { function Person (name,age){ //在构造函数中,this表示新建的对象
## 12、修改原型 **大部分情况下,我们是不需要修改原型对象** 注意: **千万不要通过类的实例去修改原型** 1. 通过一个对象影响所有同类对象,这么做不合适 2. 修改原型先得创建实例,麻烦 3. 危险 处理通过__proto__能访问对象的原型外, 还可以通过类的prototype属性,来访问实例的原型 修改原型时,最好通过通过类去修改 好处: 1. 一修改就是修改所有实例的原型 2. 无需创建实例即可完成对类的修改 原则: 1. 原型尽量不要手动改 2. 要改也不要通过实例对象去改 3. 通过 类.prototype 属性去修改 4. 最好
# 9、对象的结构 对象中存储属性的区域实际有两个: 1. 对象自身 - 直接通过对象所添加的属性,位于对象自身中 - 在类中通过 x = y 的形式添加的属性,位于对象自身中 2. 原型对象(prototype) - 对象中还有一些内容,会存储到其他的对象里(原型对象) - 在对象中会有一个属性用来存储原型对象,这个属性叫做__proto__ - 原型对象也负责为对象存储属性, 当我们访问对象中的属性时,会优先访问对象自身的属性, 对象自身不包含该属性时,才
# 7、多态 定义一个函数,这个函数将接收一个对象作为参数,他可以输出hello并打印对象的name属性 多态 - 在JS中不会检查参数的类型,所以这就意味着任何数据都可以作为参数传递 - 要调用某个函数,无需指定的类型,只要对象满足某些条件即可 - 如果一个东西走路像鸭子,叫起来像鸭子,那么它就是鸭子 - 多态为我们提供了灵活性 ```html <script> class Person{ constructor(name){ this.name = name }
# 8、继承 - 可以通过extends关键来完成继承 时,就相当于将另一个类中的代码复制到了当前类中(简单理解) - 继承发生时,被继承的类称为 父类(超类),继承的类称为 子类 的代码,并且可以在不修改一个类的前提对其进行扩展 封装 —— 安全性 继承 —— 扩展性 多态 —— 灵活性 ```html <script> class Animal{ constructor(name){ this.n
# 4、方法 ```html <script> class Person{ name = "孙悟空" // sayHello = function(){ // } // 添加方法的一种方式 sayHello(){ console.log('大家好,我是' + this.name) } // 添加方法(实例方法) 实例方法中this就是当前实例 static test
# 2、类 使用Object创建对象的问题: 1. 无法区分出不同类型的对象 2. 不方便批量创建对象 在JS中可以通过类(class)来解决这个问题: 1. 类是对象模板,可以将对象中的属性和方法直接定义在类中 定义后,就可以直接通过类来创建对象 2. 通过同一个类创建的对象,我们称为同类对象 可以使用instanceof来检查一个对象是否是由某个类创建 如果某个对象是由某个类所创建,则我们称该对象是这个类的实例 语法: class 类名 {} // 类名要使用大驼峰命名 const 类名 = class {} 通过类创建对象 new 类() ```htm
# 1、面向对象 面向对象编程(OOP) 1. 程序是干嘛的? - 程序就是对现实世界的抽象(照片就是对人的抽象) 2. 对象是干嘛的? - 一个事物抽象到程序中后就变成了对象 - 在程序的世界中,一切皆对象 3. 面向对象的编程 - 面向对象的编程指,程序中的所有操作都是通过对象来完成 - 做任何事情之前都需要先找到它的对象,然后通过对象来完成各种操作 - 一个事物通常由两部分组成:数据和功能 - 一个对象由两部分组成:属性和方法 - 事物的数据到了对象中,体现为属性 - 事物的功能到了对象中,体现为方法 ```
# 14、debug ```html <script> //debugger // 在代码中打了一个断点 console.log(a) // 2 var a = 1 console.log(a) // 1 function a() { alert(2) } console.log(a) // 1 var a = 3
# 13、提升 ## 变量var的提升 \- 使用var声明的变量,它会在所有代码执行前被声明 所以我们可以在变量声明前就访问变量(不推荐,不好维护) ## 函数的提升 \- 使用函数声明创建的函数,会在其他代码执行前被创建 所以我们可以在函数声明前调用函数 ## let的提升不显示 **let声明的变量实际也会提升,但是在赋值之前解释器禁止对该变量的访问** ```html <script>
# 12、window对象 Window对象 - 在浏览器中,浏览器为我们提供了一个window对象,可以直接访问 - window对象代表的是浏览器窗口,通过该对象可以对浏览器窗口进行各种操作 除此之外window对象还负责存储JS中的内置对象和浏览器的宿主对象 - window对象的属性可以通过window对象访问,也可以直接访问 - 函数就可以认为是window对象的方法 **向window对象中添加的属性会自动成为全局变量** var 用来声明变量,作用和let相同,但是var不具有块作用域 - **在全局中使用var声明的变量,都会作为window对象的属性保存*
# 9、作用域 作用域(scope) - 作用域指的是一个变量的可见区域 - 作用域有两种: ## 全局作用域 - 全局作用域在网页运行时创建,在网页关闭时消耗 - 所有直接编写到script标签中的代码都位于全局作用域中 - 全局作用域中的变量是全局变量,可以在任意位置访问 ## 局部作用域 - 块作用域 - 块作用域是一种局部作用域 - 块作用域在代码块执行时创建,代码块执行完毕它就销毁 - 在块作用域中声明的变量是局部变量,只能在块内部访问,外部无法访问 ```html <script> let a = "变量a" {
# 7、函数的返回值 在函数中,可以通过return关键字来指定函数的返回值 返回值就是函数的执行结果,函数调用完毕返回值便会作为结果返回 任何值都可以作为返回值使用(包括对象和函数之类) 如果return后不跟任何值,则相当于返回undefined 如果不写return,那么函数的返回值依然是undefined return一执行函数立即结束 ```html <script> function sum(a, b) { // console.log(a + b)
# 3、参数 ## 形式参数 - 在定义函数时,可以在函数中指定数量不等的形式参数(形参) - 在函数中定义形参,就相当于在函数内部声明了对应的变量但是没有赋值 ## 实际参数 - 在调用函数时,可以在函数的()传递数量不等的实参 - 实参会赋值给其对应的形参 - 参数: 1.如果实参和形参数量相同,则对应的实参赋值给对应的形参 2.如果
# 1、初识函数 函数(Function) - 函数也是一个对象 - 它具有其他对象所有的功能 - 函数中可以存储代码,且可以在需要时调用这些代码 ## 语法: function 函数名(){ 语句... } ## 调用函数: - 调用函数就是执行函数中存储的代码 - 语法: 函数对象() 使用typeof检查函数对象时会返回function ```html <script> // 创建一个函数对象 function fn(){ console.l
# 6、改变量和改对象 ## 修改对象(name:"猪八戒") - 修改对象时,如果有其他变量指向该对象 则所有指向该对象的变量都会受到影响 ## 修改变量(obj) - 修改变量时,只会影响当前的变量 在使用变量存储对象时,很容易因为改变变量指向的对象,提高代码的复杂度 所以通常情况下,声明存储对象的变量时会使用const 注意: const只是禁止变量被重新赋值,对对象的修改没有任何影响 ```html <script>
# 4、枚举属性 枚举属性,指将对象中的所有的属性全部获取 for-in语句 \- 语法: for(let propName in 对象){ 语句... } \- for-in的循环体会执行多次,有几个属性就会执行几次, 每次执行时,都会将一个属性名赋值给我们所定义的变量 \- 注意:并不是所有的属性都可以枚举,比如 使用符号添加的属性 ```html <script> let obj = { name:'孙悟空', age:12, gender:'