python-函数

python-函数

将代码的某个功能封装到一个参数中,使其变成一个‘工具’-----函数

定义

用def关键字来定义函数,和变量一样每个函数也有一个响亮的名字,而且命名规则跟变量的命名规则是一致的。

def hello():
	print('python')
	print('hello')

调用

通过函数名来调用函数

def westos():
	print('it is westos')
	def python():
    		print('is python')
		python()
##函数也可也嵌套
westos()

参数

定义函数的时候的变量 叫形参(名字任意)

真实的数据信息,掉用函数的时候 传递 叫实参

形参

形参:位置参数 默认参数 可变参数 关键字参数

位置参数
形参和实参必须保持一致

def getinfo(name,age):
	print('姓名:',name,'年龄:',age)

getinfo('westos',11)	
getinfo(11,'westos')	##会按用户输入信息依次录入信息
getinfo(age=11,name='westos')	##此时直接说明变量的值咋不会误录

默认参数

def mypow(x,y=2):
	print(x ** y)

mypow(2,3)
mypow(2)	
##在用户未输入第二个值时,默认取2

可变参数(列表,集合)

def mysum(*a):
	print(*a)
	print(a)
	sum  = 0
	for item in a:
   		 sum += item

	 print(sum)

mysum(1,2,3,4,5)
##参数解包:在参数名前加*
nums = [1,2,3,4]
*nums:1 2 3 4

关键字参数(字典)

def getinfo(name,age,**k):
	print(name)
	print(age)
	print(k)


d = dict(a=1,b=2)
print(*d)	##*d:12
**d:{'a': 1, 'b': 2}
##字典的解包
getinfo('westos',12,**d)	

返回值

函数运算的结果,还需要进一步操作,给函数一个返回值.
return用来返回函数执行的结果,如果函数没有返回值,默认返回None.
一旦遇到return 函数执行结束,后面的代码不会执行.
多个返回值的时候,python会帮我们封装成一个元组类型.

def mypow(x,y=2):
	return x**y,x+y

print(mypow(5,2))

作用域

python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:
L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (Global) 全局作用域
B (Built-in) 内建作用域
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了
global:声明全局变量

修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字
a = 1
print(‘outside:’,id(a))

def fun():
	global a #声明a为全局变量
	a = 5
	print('inside:',id(a))

fun()
print(a)
print(id(a))

is和==的区别

id():在内存中存储的位置
type():变量的类型
value:值

==:type value	
is:type value id

深拷贝和浅拷贝的区别

当一个变量a=x的时候 约定为:指向一个地址的过程
浅拷贝:copy.copy()
深拷贝:copy.deepcopy()

他们本质的区别是拷贝出来的对象的地址是否和原对象一样,也就是地址的复制还是值的复制的区别
深拷贝和浅拷贝需要注意的地方就是可变元素的拷贝

什么是可变对象,什么是不可变对象:

可变对象是指,一个对象在不改变其所指向的地址的前提下,可以修改其所指向的地址中的值;

不可变对象是指,一个对象所指向的地址上值是不能修改的,如果你修改了这个对象的值,那么它指向的地址就改变了,相当于你把这个对象指向的值复制出来一份,然后做了修改后存到另一个地址上了,但是可变对象就不会做这样的动作,而是直接在对象所指的地址上把值给改变了,而这个对象依然指向这个地址。

深拷贝就是完全跟以前就没有任何关系了,原来的对象怎么改都不会影响当前对象
浅拷贝,原对象的list元素改变的话会改变当前对象,如果当前对象中list元素改变了,也同样会影响原对象。

如果 copy.copy()拷贝的是元组 那么它不会进行浅拷贝 仅仅是指向

因为元组是不可变数据类型,意味着数据一定不能修改
因此它会自动判断为指向

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值