侧边栏壁纸
  • 累计撰写 781 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

函数

Dettan
2021-07-10 / 0 评论 / 0 点赞 / 89 阅读 / 1,948 字
温馨提示:
本文最后更新于 2022-04-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

return较为灵活,后面可以带值也可以不带值,不带值相当于返回None

不用声明返回值类型,函数传递的都是对象,准确来说是指针。


如果是传的不可变的类型的参数,如str,tuples,num,那么任何函数内的值变更都影响不到函数外。反之list,dict则会。


# 定义函数

def printme( str ):

"打印任何传入的字符串"

print (str);

return;

# 调用函数

printme("我要调用用户自定义函数!");

printme("再次调用同一函数");


参数
以下是调用函数时可使用的正式参数类型:
必需参数
关键字参数
默认参数
不定长参数
一    必须参数就是普通的参数,不填报错。
二    关键字参数就是调用的时候填成name=value 的形式替代原先value的形式,所以参数可以不按顺序填。
三    默认参数就是声明的时候填成name=value 的形式替代原先value的形式,所以调用的时候可以不填默认的参数。
四    不定长参数就是声明的时候参数前加一个*,调用的时候就可以填0或者多个参数。
例子
def hel(*mes):
print("|",end="")
for x in mes:
print(x,end="|")
hel("654123",1,4,6,5)
匿名函数

# 可写函数说明

sum = lambda arg1, arg2: arg1 + arg2;

# 调用sum函数

print ("相加后的值为 : ", sum( 10, 20 ))


te=lambda:[x for x in range(10)]; print(te()) #分号去掉报错。


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

x = int(2.9) # 内建作用域

g_count = 0 # 全局作用域

def outer():

o_count = 1 # 闭包函数外的函数中

def inner():

i_count = 2 # 局部作用域


Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这这些语句内定义的变量,外部也可以访问,如下代码:
来源: http://www.runoob.com/python3/python3-function.html
调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。
global 和 nonlocal关键字
在函数里要修改全局的用global
如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字
5、新浪面试题
li = [lambda :x for x in range(10)]
1
li = [lambda :x for x in range(10)]
判断下li的类型?li里面的元素为什么类型?
print(type(li)) print(type(li[0]))

<class 'list'>

<class 'function'>

                    <div style="padding-left: 1.5em; display: flex; flex-direction: column;">
1
print(type(li))
可以看到li为列表类型,list里面的元素为函数,那么打印list里面第一个元素的返回值,此时返回值为多少?
#lambada 面试题

li = [lambda :x for x in range(10)]

res = li0
print(res)

#输出:9


1
2
3
4
5
6
7
8
#lambada 面试题
li = [lambda :x for x in range(10)]
res = li[0]()
print(res)
#输出:9
li第一个函数的返回值为9还不是0,记住:函数在没有执行前,内部代码不执行;博客里面的代码可以自己练练,加深下印象
来源: http://python.jobbole.com/86465/
0

评论区