1.1函数
1.1.1什么是函数
函数就是程序实现模块化的基本单元,一般实现某一功能的集合。
函数名:就相当于是程序代码集合的名称
参数:就是函数运算时需要参与运算的值被称作为参数
函数体:程序的某个功能,进行一系列的逻辑运算
return 返回值:函数的返回值能表示函数的运行结果或运行状态。
1.1.2函数的作用
函数是组织好的,可重复使用的,用来实现单一,或者相关功能的代码。
函数能够提高应用的模块性,和代码的重复利用率
我们已近知道python提供了许多内置函数,比如print(),我们自已创建的函数称为内置函数
1.1.3定义函数的语法
def函数名(参数):
函数体return 返回值内容
1.1.4函数定义规则
函数代码以def关键词开头,后接定义函数的名称和圆括号,冒号():
函数内容以冒号":"开始,并且缩进
函数内容的第一行内容可选择性使用文档字符串---用来定义该函数的说明
函数的返回值: return [返回值内容] 用于结束函数,返回一个值,表示程序执行的结果。
函数不带return 默认返回None 返回值可以是任何类型的数据(数字,字符串,函数,列表,元祖,字典等),也可以是一个表达式
函数参数:任何传入参数和自变量必须放在圆括号中间,圆括号之间用于定义参数。
1.1.5函数调用
定义函数语法
defprintinfo():print("hello world")return
调用函数
printinfo()#函数执行结果
hello world
查看函数返回值
print(printinfo())#结果
hello world
None#默认函数值返回类容
其他返回值示例
defprintinfo():print("hello world")return [111+222]print(printinfo())#结果
hello world
[333] #返回值内容
1.1.5函数参数
注:形参和实参(定义函数时,圆括号(参数)中的所有参数都是形式参数也称为形参,调用函数中,圆括号(参数)中的参数称为实际参数,也叫实参)
1)必须参数::
2)关键字参数:
3)默认参数:
4)可变参数(*args,**kwargs):
1.必须参数:
从字面理解:必须要传入参数
传入的参数:与定义的形参顺序一一对应
defstuinfo(name,age):print(name,age)return
#在不传入参数
stuinfo() #调用函数
#函数执行结果
TypeError: stuinfo() missing 2 required positional arguments: 'name' and 'age'
#报错,提示类型错误,该函数,缺少两个位置参数
不传入参数
defstuinfo(name,age):print(name,age)returnstuinfo("zhangsan",18)#函数执行结果
zhangsan 18
传入参数
2.关键字参数
defstuinfo(name,age,hobby):print(name,age,hobby)return
#参数位置匹配,关键字参数,与形参的位置顺序无关,
stuinfo(age=19,name="lisi",hobby="run")#name= age= hobby=就是关键字参数
#函数执行结果
lisi 19 run
关键字参数
3.默认参数
默认参数必须指向不变的对象
当函数有多个参数,把变化大的参数反正前面,变化小的参数放在后面。变化小的参数就作为默认参数。
默认参数好处:降低调用函数的难度
#默认参数,可以直接使用用,也可以修改默认参数值
def grade(name,age,city="BeiJing"): #city="BeiJing" 就是默认参数
print(name,age,city)#grade("yangjian",age=18)
grade("lala",age=18,city="shanghai")#grade函数执行结果
lala 18 shanghai
默认参数
4.可变参数
*args **args
用途:在定义函数需要,每个定义函数功能的都可以继续优化,所以我们需要用动态参数
如果把参数写死了,后期继续修改完善的功能的,修改该函数功能则会相当麻烦
*args 结果类型是元祖,传递值是任意类型
def test(*args):print(args)
test(123456,[12,45,88],{"name":"qw","age":15}) #可以传递任意参数的类型#函数执行结果
(123456, [12, 45, 88], {'name': 'qw', 'age': 15})
**kwargs结果类型是字典,传递值是以key=value方式传入
def test1(**kwargs):print(kwargs)
test1(name="xiha",age="12")#执行结果
{'age': '12', 'name': 'xiha'}
函数* 和 ** 解包
#*
def test(*args):print(args)
test(*[1,2,3,4,5,6,7,8,9]) #*参数解包,把【元素】 循环出来,添加到元祖中#结果
(1, 2, 3, 4, 5, 6, 7, 8, 9)
*
def test1(**kwargs):print(kwargs)
test1(**{"hobby":456,"number":789}) #**参数解包,把key:value 循环出来,添加到字典中#结果
{'number': 789, 'hobby': 456}
**
函数参数组合
def f2(a, b, c=0,*args,**kwargs):print('a =', a, 'b =', b, 'c =', c, args,kwargs)
f2(12,b=12,c=89,aa="as",bb="xxx")#结果
a = 12 b = 12 c = 89 () {'bb': 'xxx', 'aa': 'as'}
函数参数总结:
1.形参的位置顺序,必须与实参的顺序一一对应,缺一不行,多一不行
2.关键字参数,无须一一对应,缺一不行,多一不行
3.位置参数必须在关键字参数左边
4.默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误
1.2全局变量和局部变量
在子程序中定义的变量称为局部变量,只在子程序内部生效,
在程序一开始定义的变量称为全局变量
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用,在其他地方全局变量起作用
name = "xixi" #全局变量
defchange_name():
name= "haha" #局部变量只在函数局部作用域内生效
print("我的名字",name)returnchange_name()print(name)defme():global name #声明name是全局变量 global
name = "yj" #修改name全局变量的值
print(name)returnme()
如果全局变量是可变的数据类型,函数可以对全局变量内部直接进行修改
eng = ["merry","jack","petter"]defchang():
eng.append("mali")print(eng)returnchang()
总结:
一般写程序变量的命名规则
###全局变量变量名大写
###局部变量变量名小写
函数优先读取局部变量,能读全局变量,无法对全局变量重新赋值操作,#全局变量是不可变的类型
全局变量是可变类型,函数可以对全局变量进行操作
函数中有global关键字,变量本质就是全局变量,可读取全局变量,也可操作全局变量
1.3函数之间嵌套
name = "YangJIan" #最外层
def change_name(): #第二层
name = "YangJIan2"
def change_name2(): #第三层
name = "YangJIan3"
print("第3层打印", name)
change_name2()#调用内层函数
print("第2层打印", name)
change_name()#先执行局部函数的打印,
print("最外层打印", name)#第3层打印 YangJIan3#第2层打印 YangJIan2#最外层打印 YangJIan
注:多层函数嵌套,子级函数,只在子级函数内部生效。父级函数能调用子级函数的功能
1.4递归函数
1.在函数内部,可以调用其他函数,如果一个函数在内部调用自身本身,这个函数就是递归函数。
2.在使用递归策越是,必须有一个明确的敌对结束条件,称为递归出口
函数调用的时候,每次调用时要做地址保存,参数传递等。
如果函数包含了对其自身函数的调用,该函数就是递归。如下
deffoo(n):#实现阶乘
if n == 1:return n #当满种条件n==1才执行return 操作
res = n*foo(n-1) #调用自已本身的函数的结果(再判断条件是否满足条件)给res ,
returnresprint(foo(5))#120
递归算法所所体现的重复一般有的要求:
1.每次调用在上次规模上都有有所减小:
2.每次递归调用都是有明确条件的。
3.相领两次的重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出(返回值结果))就作为后一次的输入;
4.在问题的规模得到满足条件时,而不再进行递归调用。
草色新雨中, 松声晚窗里。之前我们学习 Power Query 都是用鼠标就完成了很多复杂的操作。虽然 PowerQuery 已经将大部分常用功能内置成到功能区。基本能完成我们大部分的报表自动化功能。但是总有些复杂的或者个性化的问题是开发团队没有预先想到的,这时我们就需要学习 M 语言。一、M 语言在哪里?M语言的函数公式有三个地...
前言从2020年3月份开始,计划写一系列文档--《小白从零开始学编程》,记录自己从0开始学习的一些东西。第一个系列:python,计划从安装、环境搭建、基本语法、到利用Django和Flask两个当前最热的web框架完成一个小的项目第二个系列:可能会选择Go语言,也可能会选择Vue.js。具体情况待定,拭目以待吧。。。基本概念表达式表...
原标题:基于Python建立深度神经网络!你学会了嘛?图1 神经网络构造的例子(符号说明:上标[l]表示与第l层;上标(i)表示第i个例子;下标i表示矢量第i项)单层神经网络图2 单层神经网络示例神经元模型是先计算一个线性函数(z=Wx+b),接着再计算一个激活函数。一般来说,神经元模型的输出值是a=g(Wx+b),其中g是激活函数(...
在学习MySQL的时候你会发现,它有非常多的函数,在学习的时候没有侧重。小编刚开始学习的时候也会有这个感觉。不过,经过一段时间的学习之后,小编发现尽管函数有很多,但是常用的却只有那几个。今天小编就把常用的函数汇总一下,为大家能够能好的学习MySQL中的函数。MySQL常使用的函数大概有四类。时间函数、数学函数、字符函数、控制函数。让我...
情况一:后台给的日期是Sat Jul 31 2021 21:50:01 GMT+0800 (中国标准时间),如果直接呈现给用户,他们一定会吐槽你不说人话~~~ 情况二:后台给的百分数是小数没有转化成00%格式 采用vue的过滤机制就可以解决这种情况,有两种方式: 第一种:全局写法,在main.js里面加入 // 【...
问题描述 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。 例如:输入test.exe -a 1 2 执行1+2输出3 问题分析 上面的逻辑思维很简单,但是问题在于如何在VS中向...
------------------------siwuxie095 MyBatis 中 #{} 和 ${} 的区别 1、在 MyBatis 的映射配置文件中,动态传递参数有两种方式: (1)#{} 占位符 (2)${} 拼接符 2、#{} 和...
#2.6 map()# 第一个参数传入一个函数,,第二个参数为一个可迭代对象li_1 = (1,3,5,7)def funcA(x): return x*xm1 = map(funcA,li_1)print(type(m1))print(m1())# 2.6 reduce()# 第一个参数传入一个函数,第二个参数 可以迭...
列表,元组,字典的转换。 list列表是一组可变的元素集合 列表是'[]'括号组成的,[]括号包含所有元素,列表的创建可以传递字符串,也可以传递多个字符串来创建列表。如"asd", / "a","b" ... tuple元组的创建和列表一致,区别在于 元组是以'()'创建的,并且元组数据不可变。 dict字典不同于列表和元组,他...
多线程编程 mind-Mapping保存有一下导图的xmind文件,可直接获取 互斥变量 互斥对象 ptrhead相关接口 条件变量 future异步访问类 async类 promise类 package_task类...
我们在实际开发的过程中,可能需要某些类的成员变量并不是针对每一个对象的,而是针对每一个类而言的,比如在银行中有一个利率数据,我们希望的是,当一个利率改变的时候,所有的对象都能够看到这个改变的数据,并利用它,而不是每一个对象都有一个利率成员变量。这个时候就设计到了静态成员变量。 一. 内存那些事 静态成员变量是存放在静态...
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触...
引子 阅读以下代码,并尝试分析 代码解析 在主线程中,线程Id为1,为线程变量赋值 变量==d6ff开启一个新的task,此时线程Id为4,变量==d6ff,并调用Task1开启一个同步Task3,线程Id为1。变量==d6ff,修改值==f598此时第二步启动的Task1运行,线程Id为4,变量==d6ff,修改值=...
操作系统基础 操作系统是协调、控制、管理计算机硬件资源与软件资源的控制程序 为什么要用操作系统? 1.操作系统可以把复杂的操作简化给用户使用或者应用程序 2.可以让应用程序对计算机硬件竞争变的有序 一套完整的计算机分为:操作系统、应用程序、计算机硬件 编程语言的分类 机械语言:使用二进制让计算机工作 优点:运行...