函数的定义python编程_Python开发基础 day5 函数的定义与使用

#coding:utf-8:

# x='你' # u'hello'# print(x.encode('gbk'))

# print(b'\xc4\xe3')

# y=b'\xc4\xe3'# print(y.decode('gbk'))

# x='你' #unicode.encode('utf-8')

y=u'你'print repr(y)

# whileTrue:

# msg=input('>>:')

#

# # print(len(msg))

# # res=len(msg)

# #if res < 5:

# #continue# #else:break#

#

#if len(msg) < 5:

#continue#else:break#

# with open('a.txt') asf:

#for i inf.readlines():

# print(i,end='')

# with open('a.txt') asf:

#for i inf:

# print(i,end='')

# with open('a.txt') asf:

# print(f.readline(),end='')

# print(f.readline(),end='')

# print(f.readline(),end='')

# print(f.readline(),end='')

# print(f.readline(), end='')

# print(f.readline(), end='')

# with open('a.txt','r',encoding='utf-8') asf:

# print(len(f.read()))

# with open('a.txt','rb') asf:

# file_size=len(f.read())

# import os

# print(os.path.getsize('a.txt'))

函数参数的使用:

# def foo(x):

# print(x)

#

#

# foo(1)

# foo('a')

# foo({'a':2})

#形参与实参:

# def foo(x,y): #x=1,y=2#return x+y

#

# foo(1,2)

#===================================part1

#位置参数:按照从左到右的顺序依次定义的参数

def foo(x,y):

print(x)

print(y)

#按位置定义的形参,必须被传值,多一个不行,少一个也不行

# foo(1,2,3)

#按位置定义的实参,与形参一一对应

# foo(2,10)

#===================================part2

#关键字参数:实参在定义时,按照key=value形式定义

# def foo(x,y):

# print(x)

# print(y)

#

# # foo(y=10,x=1)

# foo(y=10,x=1) #关键字参数可以不用像位置实参一样与形参一一对应,指名道姓地传值

def foo(x,y):

print(x)

print(y)

# foo(1,10)

# foo(x=1,y=10)

# foo(1,y=10)

# foo(y=10,1)

# foo(x=10,1)

# foo(1,x=10,y=20)

# def foo(x,y,z):

# print(x)

# print(y)

# print(z)

# # foo(1,z=20,10)

# foo(1,y=2,z=10)

#注意的问题一:位置实参必须在关键字实参的前面

#注意的问题二:实参的形式既可以用位置实参又可以是关键字实参,但是一个形参不能重复传值

#===================================part3

#默认参数:在定义函数阶段,就已经为形参赋值,定义阶段有值,调用阶段可以不用传值

# def func(x,y=10):

# print(x)

# print(y)

# func(1,20)

# func(1)

# def func(y=10,x):

# print(x)

# print(y)

#位置实参

#关键字实参

#位置形参

#默认参数(形参)

#形参的应用:值经常变化的需要定义成位置形参,

# 值大多数情况下都一样,需要定义成默认参数

# def register(name,age,sex='male'):

# print(name,age,sex)

#

# register('alex',1000)

# register('wupeiqi',9000)

# register('yuanhao',10000)

# register('王铁蛋',10000,'female')

#默认参数需要注意的问题一:必须放在位置形参后面

#默认参数需要注意的问题二:默认参数通常要定义成不可变类型

#默认参数需要注意的问题三:默认参数只在定义阶段被赋值一次

# x=10# def func(name,age=x):

# print(name)

# print(age)

# x=20#

# func('egon')

# def func(name,age=10,sex='male',hobby=['play1','play2']):

# print(name)

# print(age)

# print(hobby)

#

# func('egon')

#===================================part4

#可变长参数:可变长指的是实参的个数不固定

#按位置定义的可变长度的实参:*

#按关键字定义的可变长度的实参:**

#

# def func(x,y,*args): #x=1,y=2,args=(3,4,5,6)

# print(x,y)

# print(args)

#

# func(1,2,3,4,5,6)

# def func(x,y,*args): #args=(3,4,5,6)

# print(x,y)

# print(args)

#

# func(1,2,*(3,4,5,6)) #foo(1,2,3,4,5,6)

# def func(x,y,z):

# print(x,y,z)

#

# # func(1,*(2,3)) #func(1,2,3)

# func(*(2,3)) #func(2,3)

#

# def func(x,y=2,z=1):

# print(x,y,z)

#

#

# func(*('a','b','c')) #func('a','b','c')

# def func(x,y,**kwargs): #x=1,y=2,kwargs={'a':1,'b':3,'z':3}

# print(x,y)

# print(kwargs)

#

# func(1,y=2,z=3,a=1,b=3)

# def func(x,y,**kwargs): #x=1,y=2,**kwargs=**{'a':1,'b':3,'z':3}

# print(x,y)

# print(kwargs)

#

# func(1,y=2,**{'a':1,'b':3,'z':3}) #func(1,y=2,z=3,b=3,a=1)

# def func(x,y=1,z=1):

# print(x,y,z)

#

# func(**{'y':2,'x':1,'z':3}) #

# def wrapper(*args,**kwargs): #可以接受任意形式,任意长度的参数

# print(args)

# print(kwargs)

#

#

# wrapper(1,2,3,3,3,3,3,x=1,y=2,z=3)

#

# def index(name,group):

# print('welcome %s to index page,group is: %s' %(name,group))

#

# def wrapper(*args,**kwargs): #可以接受任意形式,任意长度的参数

# # print(args) #args=(1,2,3)

# # print(kwargs) #kwargs={'x':1,'y':2,'z':3}

# index(*args,**kwargs) #index(*(1,2,3),**{'x':1,'y':2,'z':3}) #index(1,2,3,z=3,y=2,x=1)

#

# wrapper(name='egon',group='group1')

#命名关键字参数:定义在*后的形参,这类形参,必须被传值,而且要求实参必须是以关键字的形式来传值

# def register(**kwargs):

# print(kwargs)

#if 'name' inkwargs:

# print(kwargs['name'])

#if 'age' inkwargs:

# print(kwargs['age'])

#

#

# # register(name='egon',age=18)

# register()

# def register(*args,name='egon',age):

# print(args)

# print(name)

# print(age)

#

# # register(name='egon',age=18)

# register(1,2,2,3,age=10)

#

# def register(name,age,*,group,**kwargs):

# print(name)

# print(age)

# print(kwargs)

#

#

# # register('egon',18)

# register('egon1',18,hobby='paly1',group='group1')

# def func(x,y=1,*args,z,**kwargs):

# print(x)

# print(y)

# print(args)

# print(z)

# print(kwargs)

#

# func(1,2,3,4,5,z=10,a=1,b=2)

#

# def func(x,*args,z=1,**kwargs):

# print(x)

# print(args)

# print(z)

# print(kwargs)

#

# func(1,2,3,4,5,a=1,b=2,c=3)

#形参:位置形参,默认参数,*args,命名关键字参数,**kwargs

函数的返回值:

# y=x**2# def func(x):

#return x**2# y=func(10) # 10**2#

# print(y)

# def foo():

#returnNone

#

# res=foo()

# print(res)

# def foo():

#return {'a':1}

#

# res=foo()

# print(res['a'])

# def foo():

#return {'a':1},1,'a',[1,2]

#

# res=foo()

# print(res)'''返回值:可以返回任意类型

没有return:Nonereturnvalue: valuereturnval1,val2,val3 :(val1,val2,val3)

return的效果:只能返回一次值,终止函数的执行'''def foo():return 1print('=====>')return 2

return 3

return 4print(foo())

函数的使用原则:

#函数的使用必须遵循:先定义后使用的原则

#函数的定义,与变量的定义是相似的,如果没有事先定义函数而直接引用

#就相当于在引用一个不存在变量名

# print(x) #NameError

# x=1# func

#

# def func():

# print('hello world')

# def func():

# print('hello world')

#

# # print(func)

# func()

# def bar():

# print('from bar')

#

# def foo():

# print('from foo')

# bar()

#

# foo()

# #定义阶段

# def foo():

# print('from foo')

# bar()

#

# def bar():

# print('from bar')

#

# #调用阶段

# foo()

#定义阶段:只检测语法,不执行代码

# def func():

#if 1>2# print('hahahahahahah')

def func(): #语法没问题,逻辑有问题,引用一个不存在的变量名

asdfasdfasdfasdfasdf

函数对象:

#函数是第一类对象: 指的是函数可以被当做数据传递

def func():

print('from func')

#可被引用

# f=func

#可以当做函数的参数

# def func():

# print('from func')

# def foo(x):

# print(x)

# x()

#

# foo(func)

#可以当做函数的返回值

# def foo():

# print('from foo')

# def bar():

#returnfoo

# f=bar()

# print(f)

# print(foo)

# x=0# def f1():

# x=1# def f2():

# # x=2# print(x)

#returnf2

# f=f1()

# # print(f)

# f()

#可以当做容器类型的元素

# defselect():

# print('select function')

#

# func_dic={

#'select':select,

# }

#

# # print(func_dic['select'])

# func_dic['select']()

#

# defselect():

# print('select func')

#

# def delete():

# print('delete func')

#

# def change():

# print('change func')

#

# def add():

# print('add func')

#

#

#while 1:

# cmd=input('>>:').strip()

#if not cmd:continue#if cmd == 'select':

#select()

# elif cmd== 'delete':

# delete()

# elif cmd== 'change':

# change()

# elif cmd== 'add':

# add()

#else:

# print('无效的命令')

defselect(cmd_l):

filename=cmd_l[-1]

pattern=cmd_l[1]

with open(filename,'r',encoding='utf-8') asf:for line inf:if pattern inline:

print(line)

def delete():

print('delete func')

def change():

print('change func')

def add():

print('add func')

def check():

print('check func')

func_dic={'select':select,'delete':delete,'change':change,'add':add,'check':check,

}while 1:

inp=input('>>:').strip()if not inp:continuecmd_l=inp.split()

# print(cmd_l)

cmd=cmd_l[0]if cmd infunc_dic:

func_dic[cmd](cmd_l)else:

print('无效的命令')

函数嵌套:

#函数的嵌套调用

#

# def max2(x,y):

#if x >y:

#returnx

#else:

#returny

#

# def max4(a,b,c,d):

# res1=max2(a,b) #23# res2=max2(res1,c) #23# res3=max2(res2,d) #31#returnres3

#

#

# print(max4(11,23,-7,31))

#函数的嵌套定义

def f1():

def f2():

def f3():

print('from f3')

print('from f2')

f3()

print('from f1')

f2()

# print(f1)

f1()'''fromf1fromf2fromf3'''

名称空间与作用域:

#名字空间:存放名字与值的绑定关系

#名称空间分为三种

#内置名称空间:python解释器自带的名字,python解释器启动就会生成

#全局名称空间:文件级别定义的名字都会存放与全局名称空间,执行python文件时会产生

# x=1# def func():

# pass

#

#classFoo:

# pass

#

# import os

#

#if 1 > 2:

# y=3#局部名称空间:定义在函数内部的名字,局部名称空间只有在调用函数时才会生效,函数调用结束则失效

# def func(x,y): #x=1,y=2# z=3# func(1,2)

#三者的加载顺序:内置名称空间->全局名称空间->局部名称空间

#取值:局部名称空间->全局名称空间->内置名称空间

# # max=10# def func(): #x=1# # max=20# print(max)

#

#

# func()

# max=10#

# def func(): #x=1# max=20# # print(max)

# func()

#

#

# print(max)

#

# # x=0# def f1():

# # x=1# def f2():

# # x=2# def f3():

# # x=3# print(x)

# f3()

# f2()

#

# f1()

#作用域:作用范围

#全局作用域:内置名称空间与全局名称空间的名字属于全局范围,

# 在整个文件的任意位置都能被引用,全局有效

#局部作用域:局部名称空间的名字属于局部范围,

#只在函数内部可以被引用,局部有效

# x=1# def foo():

# def f2():

# print(x)

# f2()

# def bar():

# print(x)

#

# foo()

# bar()

# def f1():

# x=1# def f2(): #f2=value

# # x=2# print(x)

# f2()

# f1()

x=1def func():

x=2def f1():pass

# print(dir(globals()['__builtins__'])) #全局作用域name

# print(locals()) #局部作用域name

func()

print(globals()islocals())

#局部作用域----->全局作用域

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值