摘要:讨论值传递和引用传递时,其实就是看值类型变量和引用类型变量作为函数参数时,修改形参是否会影响到实参 在Go语言中五个引用类型变量,其他都是值类型 slice map channel interface func() 引用类型作为参数时,称为浅拷贝,形参改变,实参数跟随变化.因为传递的是地址,形参和实
阅读全文
摘要:闭包不是Go语言独有的概念,在很多编程语言中都有闭包 闭包就是解决局部变量不能被外部访问一种解决方案 是把函数当作返回值的一种应用 代码演示 总体思想为:在函数内部定义局部变量,把另一个函数当作返回值,局部变量对于返回值函数就相当于全局变量,所以多次调用返回值函数局部变量的值跟随变化 package
阅读全文
摘要:包(package)是Go语言中组织单元.包是逻辑上的分组.而物理上的分组是不同的文件夹,文件夹和包一般是对应的 把多个文件放入同一个文件夹中,这些文件就是在同一个包中. 虽然允许源码文件的package和文件夹名不同但是最终编译后都会把文件的package编译成文件夹名称.所以为防止错误最好把文件
阅读全文
摘要:在Go语言中函数也是一种类型,函数有多少种形式,函数变量就有多少种写法 var a func() //无参数无返回值 var b func(int) //有一个int类型参数 var c func(int) string //有一个int类型参数和string类型返回值 fmt.Println(a,
阅读全文
摘要:函数:一段代码块 所有的流程控制代码和业务代码都只能写在函数内部 为什么使用函数: 把一个功能提出作为一个函数便于后期维护,结构清晰 函数声明的语法 函数声明后不会执行,必须调用后才会执行 func 函数名(参数列表) 返回值{ //函数体 } 函数调用的语法 返回值:=函数名(参数) 无参数无返回
阅读全文
摘要:双向链表结构如下 双向链表结构中元素在内存中不是紧邻空间,而是每个元素中存放上一个元素和后一个元素的地址 第一个元素称为头(head)元素,前连接(前置指针域)为nil 最后一个元素称为尾(foot)元素,后连接(后置指针域)为nil 双向链表的优点: 在执行新增元素或删除元素时效率高,获取任意一个
阅读全文
摘要:map以散列表方式存储键值对集合 map中每个元素都是键值对 map[key]Value key是操作map的唯一标准.可以通过key对map中元素进行增加/删除/修改/查看 key是唯一的,添加重复的key会覆盖之前的元素. map是值类型,只声明时为空指针(nil) var m map[stri
阅读全文
摘要:切片的英文名称slice 切片:具有可变长度相同类型元素序列. 由于长度是可变,可以解决数组长度在数据个数不确定情况下浪费内存的问题. 切片和数组声明时语法最主要的区别就是长度 var slice []string //切片 var array [3]string //数组 切片只声明时为nil,没
阅读全文
摘要:循环:让程序多次执行相同的代码块 for循环是Go语言中唯一一个循环结构 for循环经典语法 先执行表达式1 执行表达式判断是否成立,如果成立执行循环体 循环体执行完成后,执行表达式3 再次执行表达式2,判断是否成立. for 表达式1;表达式2;表达式3{ //循环体 } 代码示例 经典for循环
阅读全文
摘要:数组:具有固定长度相同类型元素序列 声明数组的语法 //var 对象名 [长度]元素类型 var arr [5]int fmt.Println(arr) //输出:[0 0 0 0 0] 数组就是内存中一段固定长度的连续空间. 声明数组后数组就会在内存中开辟一块连续空间,每个值称为数组的元素,且元素
阅读全文
摘要:switch结构介绍 switch也属于条件判断的语句 支持多种写法,和if .. else if ...else 结构的功能类似,但是里面的细节需要注意的地方更多 switch基本语法 switch [定义变量;] [变量]{ case [条件/具体值]: //代码 case [条件/具体值]:
阅读全文
摘要:if单独使用 if单独使用时只影响到自己对应的代码块 func main() { score := 65 if score >= 60 { fmt.Println("及格") } } 可以在if 表达式中声明变量,这个变量的范围只在if中能够使用 func main() { if score:=60
阅读全文
摘要:可以通过new函数直接创建一个类型的指针 变量名:=new(Type) 使用new函数创建的指针已有指向,可以使用*指针对象进行赋值. func main() { a := new(int) fmt.Println(a) //输出:指针地址 *a = 123 fmt.Println(*a) //输出
阅读全文
摘要:变量地址 变量本质就是内存中一块数据的标记.把值存储到变量中实质是把值存储到内存中 每次对变量重新赋值就是在修改变量地址中的内容 在Go语言中可以通过 &+变量名 获取到变量地址值 重新创建一个非引用型变量(即使是把已有变量直接赋值给新变量)也会新开辟内存地址. func main(){ a:=3
阅读全文
摘要:定义常量时如果不是必须指定特定类型,可以省略类型,使用默认类型.且数值类型常量(不定义类型)可以直接进行运算 常量的值可以是表达式,但是不允许出现变量 func main() { const a string = "smallming" const b = 123 const c = 3*2 + 5
阅读全文
摘要:可以使用len(字符串变量)获取字符串的字节长度,其中英文占1个字节长度,中文占用3个字节长度 可以使用变量名[n]获取到字符串第n+1个字节,返回这个字节对应的Unicode码值(uint8类型).注意n的取值范围是[0,长度) 可以使用变量名[n:m]取出大于等于n小于m的字符序列 n和m都可以
阅读全文
摘要:概述 字符串类型的值使用双引号""扩上,内容支持转义字符串.两侧使用反单引号时原格式输出 func main() { a := "a\tbc" b := `a\tbc` fmt.Println(a) //输出:a abc fmt.Println(b) //输出a\tabc } 字符串和数值转换 包s
阅读全文
摘要:Go语言是静态类型语言,并且不具备低精度向高精度自动转换功能,所以不同类型变量之间相互赋值需要进行类型转换. func main() { //声明3个类型变量 var a int = 1 var b int32 = 2 var c int64 = 3 fmt.Println(a, b, c) //把
阅读全文
摘要:单个变量声明及赋值 先声明后赋值(声明后开辟内存,不同类型变量都有不同初值) //语法: //1. 声明 var 变量名 类型 //2. 赋值 变量名=值 //示例: var smallming string smallming = "英文名" 声明并赋值(此方式不建议) //语法: var 变量名
阅读全文
摘要:接收用户输入的几种方式 使用Scanln(&变量名,&变量名)的方式接收. 输入的内容必须都在同一行 每个内容之间使用空格分割 回车换行后表示停止输入. 如果希望接收3个值,而在控制台只输入2个值,回车后也停止接收 如果希望接收2个值,而在控制台输入3个,回车后只能接收两个值 package mai
阅读全文
摘要:在Go语言中有多种输出方式,不同的输出适用场景不同.归纳起来三种,每种还分为3种方式(原内容,原内容+ln,原内容+f) PrintXX() FprintXX() SprintXX() FprintXX FprintXX在Go Web中使用比较多,把内容写到响应流中. 以Fprintln()举例,源
阅读全文
摘要:一、package关键字 * package表示当前代码所属的包(package),是一种组织结构.其他package通过包名调用这个包下内容* package是必须的,每个文件的package必须存在有效代码第一行* `package main` 是程序入口包,这个包中可以编写主函数 二、impo
阅读全文
摘要:看描述,创建进程失败,应该是main这个入口文件的问题。 检查包名。发现问题,IDE自动将包名导成了当前的目录名(模块) 上图两者不一致导致 解决: 修改包名为main 注:一个model下只能有一个main
阅读全文
摘要:1.""" # Write a program to compute:## f(n)=f(n-1)+100 when n>0# and f(0)=1## with a given n input by console (n>0).## Example:# If the following n is
阅读全文
摘要:1. """ Write a program that accepts a sentence and calculate the number of upper case letters and lower case letters. Suppose the following input is s
阅读全文
摘要:1. """ Write a program which can compute the factorial of a given numbers. The results should be printed in a comma-separated sequence on a single lin
阅读全文
摘要:动态添加协程 在实战之前,我们要先了解下在asyncio中如何将协程态添加到事件循环中的。这是前提。 如何实现呢,有两种方法: 主线程是同步的 import time import asyncio from queue import Queue from threading import Threa
阅读全文
摘要:上一节我们首先介绍了,如何创建一个协程对象.主要有两种方法 通过async关键字, 通过@asyncio.coroutine 装饰函数。 然后有了协程对象,就需要一个事件循环容器来运行我们的协程。其主要的步骤有如下几点: 将协程对象转为task任务对象 定义一个事件循环对象容器用来存放task 将t
阅读全文
摘要:如何定义/创建协程 只要在一个函数前面加上 async 关键字,这个函数对象是一个协程,通过isinstance函数,它确实是Coroutine类型。 from collections.abc import Coroutine async def hello(name): print('Hello,
阅读全文
摘要:1. 云计算是什么?# 维基百科上定义的云计算(英语:cloud computing),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。 枯燥的定义,听起来还是不太好理解,我尝试用自己的语言来解释下。 计算,即计算资源,包括我们熟悉的 CPU
阅读全文
摘要:yield from 是在Python3.3才出现的语法。所以这个特性在Python2中是没有的。 yield from 后面需要加的是可迭代对象,它可以是普通的可迭代对象,也可以是迭代器,甚至是生成器。 简单应用:拼接可迭代对象# 我们可以用一个使用yield和一个使用yield from的例子来
阅读全文
摘要:os._exit() vs sys.exit() os._exit()会直接将python程序终止,之后的所有代码都不会继续执行。 sys.exit()会引发一个异常:SystemExit,如果这个异常没有被捕获,那么python解释器将会退出。如果有捕获此异常的代码,那么这些代码还是会执行。捕获这
阅读全文
摘要:「argv」是「argument variable」参数变量的简写形式,一般在命令行调用的时候由系统传递给程序。这个变量其实是一个List列表,argv[0] 一般是“被调用的脚本文件名或全路径”,这个与操作系统有关,argv[1]和以后就是传入的系统命令参数。 其实是一个从程序外部获取参数的入口,
阅读全文
摘要:我们使用Flask 0.11.1,Flask-SQLAlchemy 2.1使用PostgreSQL作为DBMS. 示例使用以下代码更新数据库中的数据: entry = Entry.query.get(1) entry.name = 'New name' db.session.commit() 从Fl
阅读全文
摘要:或者检查所导包是否存在__init__.py文件,没有则添加上即可使当前文件夹变为包。
阅读全文
摘要:可按照错误建议网址查看http://www.python.org/peps/pep-0263.html 发现是因为Python在默认状态下不支持源文件中的编码所致。解决方案有如下三种: 一、在文件头部添加如下注释码: # coding=<encoding name> 例如,可添加# coding=u
阅读全文
摘要:转载: 1. 省略号也是对象 ...这是省略号,在Python中,一切皆对象。它也不例外。 在 Python 中,它叫做 Ellipsis 。 在 Python 3 中你可以直接写…来得到这玩意。 而在 2 中没有…这个语法,只能直接写Ellipsis来获取。 它转为布尔值时为真 最后,这东西是一个
阅读全文
摘要:使用url_for生成url时,需要将url协议从http换成https时,就可以通过在函数中增加参数实现: url_for('secure_thingy', _external=True, _scheme='https', viewarg1=1, ...) 官档中说了,加_scheme='http
阅读全文
摘要:class Base(object): def func(self): print('Base.func') class Foo(Base): def func(self): # 方式一:根据mro的顺序执行方法 # super(Foo,self).func() # 方式二:主动执行Base类的方法
阅读全文
摘要:先看下应用: import threading from threading import local import time obj = local() def task(i): obj.xxxxx = i time.sleep(2) print(obj.xxxxx,i) for i in ran
阅读全文
摘要:首先,生成一对密钥,并保存 def create_keys(): # 生成公钥和私钥 (pubkey, privkey) = rsa.newkeys(1024) pub = pubkey.save_pkcs1() with open('public.pem','wb+')as f: f.write(
阅读全文
摘要:CI/CD介绍互联网软件的开发和发布,已经形成了一套标准流程,假如把开发工作流程分为以下几个阶段: 编码 → 构建 → 集成 → 测试 → 交付 → 部署 正如你在上图中看到,持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Co
阅读全文