12306网站多钱做的,网站工信部不备案吗,万和城网站,长春网络公司哪家最好文章目录 1.函数1.1 语法格式1.2 函数参数1.3 函数的返回值1.4 变量作用域1.5 函数的执行过程1.6 链式调用1.7 嵌套调用1.8 函数栈帧1.9 函数递归1.10 参数默认值1.11 关键词参数 1.函数
无论是编程中的函数还是数学中的函数#xff0c;本质都是差不多的#xff0c;丢给函数… 文章目录 1.函数1.1 语法格式1.2 函数参数1.3 函数的返回值1.4 变量作用域1.5 函数的执行过程1.6 链式调用1.7 嵌套调用1.8 函数栈帧1.9 函数递归1.10 参数默认值1.11 关键词参数 1.函数
无论是编程中的函数还是数学中的函数本质都是差不多的丢给函数一些值函数在经过一系列的处理返回一个值。不过编程上函数也可以不返回值就是了。 可以把编程上的函数理解为一段可以重复使用的代码片段.
求一段区间的和。
#求1~100的和
sum 0
for i in range(1,101):sum1
print(sum)#求1~1000的和
sum 0
for i in range(1,1001):sumi
print(sum)#求20~40的和
sum 0
for i in range(20,41):sumi
print(sum)这3段代码都同质化严重就只有for循环之中的范围变了那么我们就可以把其写为一个函数来多次调用。
#定义函数
def calcSum(left,right):sum 0for i in range(left,right):sumiprint(sum)
#调用函数
calcSum(1,101)
calcSum(1,1001)
calcSum(20,41)5050
500500
630是不是很简洁这就是函数的运用把重复的代码给消除了。
1.1 语法格式
创建函数/定义函数
def 函数名(形参列表):函数体return 返回值调用函数/使用函数
函数名(实参列表)#不考虑返回值
返回值 函数名(实参列表)#考虑返回值函数只有在被调用时才会执行。
函数必须先定义再使用。
test()def test():print(hahaha)此时会报错因为还没有定义就执行了。
1.2 函数参数
在函数定义的时候可以在中指定形式参数简称形参然后在调用时由调用者把实际参数简称实参,传递过去。 这样就可以做到一份函数针对不同的数据进行计算处理。
#定义函数
def calcSum(left,right):sum 0for i in range(left,right):sumiprint(sum)
#调用函数
calcSum(1,101)
calcSum(1,1001)
calcSum(20,41)在这个代码中left right就是函数的形参1,100...就是函数的实参。 注意
一个函数可以由一个形参也可以有多个形参也可以没有形参。一个函数的形参有几个那么传递实参的时候也要传相应的个数保证个数匹配。和C/java不同python是动态类型的编程语言函数的形参不必指定参数类类型也就是说一个函数可以支持多种不同类型的参数类似于函数重载。
def test(tmp):print(tmp)
test(10)
test(hahaha)
test(False)10
hahaha
False1.3 函数的返回值
函数的参数可以视为函数的输入那么函数的返回值就可以视为函数的输出。 为了方便理解我们可以把函数想象成一个工厂所谓的函数输入就是提供给工厂的原材料函数输出就工厂提供的产品。 还是上面的求和函数
##无返回值
#定义函数
def calcSum(left,right):sum 0for i in range(left,right):sumiprint(sum)
#调用函数
calcSum(1,101)##有返回值
def calcSum(left,right):sum 0for i in range(left,right):sumireturn sum
#调用函数
print(calcSum(1,101))这两种代码的区别就在于前者直接子啊函数的内部就打印了后者使用了return语句把结果返回給函数的调用者再有调用者负责打印。 为了满足逻辑和用户交互分离的编程原则第二种写法更好。在第一种写法中然后后续我们需要保存结果到文件中或者通过网络发送第一种写法就难以胜任了。而第二种写法只负责计算逻辑不负责和用户交互那么就会有更多的搭配可以实现。 一个函数可以有多个return语句。
#判断一个整数是否为奇数
def isOdd(num):if num%2 0:return Falseelse:return True
x int(input(输入一个整数))
ret isOdd(x)
print(ret)执行到return语句函数便会退出回到开始调用的位置。 验证
#判断一个整数是否为奇数
def isOdd(num):if num%2 0:return Falsereturn True
ret isOdd(10)
print(ret)num是偶数返回Flase后不会再返回True了。
python可以同时返回多个值,使用,来分割多个返回值。
def test():a 100b 200return a,b
x,y test()
print(x)
print(y)100
200如果需要关注其中的部分返回值可以使用_来忽略不需要的返回值。
def test():a 100b 200return a,b
_,y test()
print(y)
# 2001.4 变量作用域
def test():a 100b 200return a,b
a,b test()观察代码函数内外部存在相同命名的变量。但其实这两组变量是不同的变量只是名字相同它们的地址是不会相同的。 每个变量都有它们的作用域变量只能在自己的作用域中生效。
def test():a 100b 200return a
print(a)
# error name a is not defined在不同的作用域中允许存在不同同名的变量。
x 10
def test():x 100print(f函数内部x {x})
test()
print(f函数外部x {x})函数内部x 100
函数外部x 10在函数内部的变量称为局部变量。不在任何函数内部的变量也称为全变量。 如果函数内部尝试访问的变量在局部不存在就会尝试去全局去寻找。
x 100
def test():print(fx {x})
test()
# 100如果想要在函数内部修改全局变量的值需要使用global关键字声明。
x 100
def test():global xx 10print(f函数内部x {x})
test()
print(f函数外部x {x})函数内部x 10
函数外部x 10如果没有global的声明的话系统会认为x 10是一个新创建的局部变量。
if/while/for等语句不会影响到变量作用域也就是说在if/while/for中定义的变量在语句外也可以正常使用。
for i in range(1,10):print(f函数内部 i {i})
print(f函数外部 i {i})1.5 函数的执行过程
调用函数才会执行函数体代码不调用就不会执行。函数体执行结束或者遇到return语句则会回到函数调用位置继续往下执行。
def test():print(hahaha)print(hahaha)
print(xixixi)
test()
print(xixixi)1.6 链式调用
其实前面我们已经用过链式调用了
##有返回值
def calcSum(left,right):sum 0for i in range(left,right):sumireturn sum
#调用函数
print(calcSum(1,101))#链式调用把一个函数的返回值作为另一个函数的参数就是链式调用。
1.7 嵌套调用
函数内部还可以调用其他的函数这叫做嵌套调用。
def testPrint():print(嵌套调用)print(嵌套调用)print(嵌套调用)test函数内调用了print函数 一个函数里面可以嵌套调用任意多个函数。 函数嵌套的过程是非常灵活的。
def a():print(a)
def b():a()print(b)
def c():b()print(c)
c()a
b
c1.8 函数栈帧
函数之间的调用关系在python中会使用一个特定的数据结构来表示称为函数调用栈。每次的函数调用都会在调用栈里新增一个元素称为栈帧。 每个函数的局部变量都包含在自己的栈帧中。
1.9 函数递归
递归是嵌套调用中的一种特殊情况就是自己调用自己。 程序调用自身的编程技巧称为递归(recursion) 递归作为一种算法在程序设计语言中广泛应用.一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型问题层层转化为一个于原问题相似的规模较小的问题来求解. 递归策略 只需要少量的代码就可以描述出解题所需要的多重计算,大大的减少程序的代码量. 递归的主要思想在于:把大事化小 #计算10的阶乘
def factor(n):if n 1:return 1return n*factor(n-1)
print(factor(10))
## 3628800注意递归代码要保证
存在限制条件当满足这个限制条件的时候递归便不在继续。每次递归调用之后越来越接近这个限制条件。 递归的优点递归类似于数学归纳法明确初始条件盒递推公式就可以解决一系列的问题。递归的代码量往往很少。 递归的缺点递归代码往往难以理解很容易超出操控范围。递归代码容易出现栈溢出的问题。递归代码往往可以转换成等价的循环代码并且通常来说循环版本的代码效率更高。
1.10 参数默认值
Python中的函数可以给形参指定默认值。 带有默认值的参数可以子啊调用的时候不传参。即缺省参数
def add(x,y,debug False):if debug:print(haha)return xy
print(add(1,2))
print(add(10,20,True))
3
haha
30注意带有默认值的参数需要放到没有默认值得参数后面
1.11 关键词参数
在调用函数得时候需要给函数指定实参一般默认情况下是按照形参得顺序来传递实参的。但是我们也可以通过关键字参数来调整这里的传参顺序显式指定当前实参传递给哪个形参。
def test(x,y):print(fx {x})print(fy {y})
test(x 10,y 20)
test(y 111,x 222)
x 10
y 20
x 222
y 111