函数啊函数
函数啊函数
先上个经济学小常识!
其实这个问题之前我就遇到过,并且花了半年多的时间才想清楚。举个简单的例子,一个公司,到底是买现成的设备和软件还是高薪雇个人自己来做呢?经济学给这类非常蛋疼的问题起了个专有名词——企业边界。经济学解释:交易成本和管理成本的比较确定了企业的边界,交易成本越低,越要外部化,管理成本越高,越要内部化。未来的企业,一定越来越小,越来越专。改成上面的例子,其实就是看公司业务了,如果严重依赖网络的,都外包出去,我操,完全控制不住啊!管理成本无限大啊!还是自己招人吧。但网络如果是非主营业务,那就没必要了。恩,就是这个意思。
函数有什么卵用
函数的三大优点
1、代码重用
2、保持一致性
3、可扩展
函数的返回值
为什么要有返回值,因为想要函数执行的结果,后面的函数需要
def test1(): print('in the test1') return 0 test1()
返回值都能返回什么?
def test3(): print('in the test3') return 1,'hello',['alex','wupq'],{'name':'alex'} test3() #可以返回任何值,本质还是只返回一个值
函数的参数及调用
def test(x,y): #x,y为形参,如果不调用,x,y永远不会占内容 print(x) print(y) test(1,2) #1,2为实参,形参和实参一一对应 test(y=2,x=1) #关键字调用,与形参位置无关, test(2,y=1) #注意!关键参数要在位置参数之后
函数的非固定参数
def test(x,y=2): #特点:调用函数的时候,默认参数非必传 print(x) #用途:1、默认安装值 2、链接数据库端口号 print(y) test(1,3)
怎么一下放多个参数
def test(*args): print(args) test(1,3,3,34,5) #接受n个位置参数,转成元祖的方式 def test(*args): #放多个参数,里面放元祖。args为默认用法,也可以是别的参数 print(args) test(1,3,3,34,5) test(*[1,3,3,34,5]) #另一种传参方式
#把n个关键字参数,转成字典的方式 def test(**kwargs): print(kwargs) test(name='alex',age='8',sex='F') #注意,这里传的key值 test(**{'name':'alex','age':'8','sex':'F'}) #另一种传参方式
#混合使用 def test(name,age=18,*args,**kwargs): print(name) print(age) print(args) #打印为空 print(kwargs) #打印字典 test('alex',4,sex='F',hohhy='tesla') #正常人 test('alex',sex='F',hohhy='tesla',age=3) #关键字参数age可以在最后
作用域、局部与全局变量 能用,但不要用!不要用!不要用!
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
login_status = False #定义全局变量 def auth(username,password): #get data from db _username = "alex" _password = "123" if username == _username and password == _password: print("passed authentication!") global login_status #引用全局变量 login_status = True print(login_status) username = input("username:") password = input("password:") auth(username,password)