今日內容
- 函式小高級
- lambda 運算式
- 內置函式
內容回顧
- 函式基本結構
- 引數
- 形參
- 基本引數:def func(a1,a2):pass
- 默認值:def func(a1,a2=123):pass 注意: 默認值如果是不可變型別,隨便玩, 可變型別:有坑
- 無敵:*args,**kwargs
- 實參
- 位置傳參
- 關鍵字傳參
- 形參
- 回傳值
- 默認回傳:None
- 特殊情況
def func():
return 1,2,32,4
#(1, 2, 32, 4)
- 作用域
- 全域和區域
- 自己有找自己,自己沒有找父級,
- 子作用域只能讀取或修改父級的值,不能重新賦值,
NUM = [1,2,3]
def func():
# NUM.append(99) # 可以修改父級的值
global NUM
NUM = 23123
func()
#將全域變數變為23123
- 函式的嵌套
def func():
name = 'oldboy'
def inner():
print(name)
name = 'alex'
inner()
print(name)
func()
alex
alex
內容詳細
-
函式小高級
a = 123
name = '老男孩好'
nums = [11,22,33,4]
data = https://www.cnblogs.com/cuiyongchao007/p/numsdef func():
pass # 100行代碼func = 函式
1.1 函式名當作變數來使用
def func():
print(123)
v1 = func
func()
v1()
123
123
def func():
print(123)
func_list = [func, func, func]
# func_list[0]()
# func_list[1]()
# func_list[2]()
for item in func_list:
v = item()#執行一遍函式,然后把回傳值賦值給v,
print(v)
def func():
print(123)
def bar():
print(666)
info = {'k1': func, 'k2': bar}
info['k1']()
info['k2']()
123
666
混淆你
def func():
return 123
func_list1 = [func,func,func]
func_list2 = [func(),func(),func()]
print(func_list1)
print(func_list2)
info = {
'k1':func,
'k2':func(),
}
print(info)
[<function func at 0x0000000001D51EA0>, <function func at 0x0000000001D51EA0>, <function func at 0x0000000001D51EA0>]
[123, 123, 123]
{'k1': <function func at 0x0000000001D51EA0>, 'k2': 123}
1.2 函式可以當作引數進行傳遞
def func(arg):
print(arg)
func(1)
func([1,2,3,4])
def show():
return 999
func(show)
func(show())
1
[1, 2, 3, 4]
<function show at 0x00000000021FDC80>
999
def func(arg):
v1 = arg()
print(v1)
def show():
print(666)
func(show)
666
None
def func(arg):
v1 = arg()#執行列印666
print(v1)#回傳值為空,列印none
def show():
print(666)
result = func(show)#func(show)執行結束后,輸出666,none
print(result)#回傳值為none,輸出為none
666
None
None
# 面試題
def func():
print('花費查詢')
def bar():
print('語音溝通')
def base():
print('xxx')
def show():
print('xxx')
def test():
print('xxx')
info = {
'f1': func,
'f2': bar,
'f3':base,
'f4':show,
'f5':test
}
choice = input('請選擇要選擇功能:')
function_name = info.get(choice)
if function_name:
function_name()
else:
print('輸入錯誤')
- lambda運算式
用于表示簡單的函式,
# 三元運算,為了解決簡單的if else的情況,如:
if 1 == 1:
a = 123
else:
a = 456
a = 123 if 1 == 1 else 456
# lambda運算式,為了解決簡單函式的情況,如:
def func(a1,a2):
return a1 + 100
func = lambda a1,a2: a1+100
func1 = lambda : 100
func2 = lambda x1: x1 * 10
func3 = lambda *args,**kwargs: len(args) + len(kwargs)
DATA = https://www.cnblogs.com/cuiyongchao007/p/100
func4 = lambda a1: a1 + DATA
v = func4(1)
print(v)#101
DATA = 100
def func():
DATA = 1000
func4 = lambda a1: a1 + DATA
v = func4(1)
print(v)#1001
func()
func5 = lambda n1,n2: n1 if n1 > n2 else n2
v = func5(1111,2)
print(v)#1111
練習題
# 練習題1
USER_LIST = []
def func0(x):
v = USER_LIST.append(x)#append無回傳值,v為none,
return v
result = func0('alex')
print(result)
# 練習題2
def func0(x):
v = x.strip()#回傳值為x去掉左右兩邊空格后的字串,
return v
result = func0(' alex ')
print(result)#alex
############## 總結:串列所有方法基本上都是回傳None;字串的所有方法基本上都是回傳新值 #################
# 練習題3
USER_LIST = []
func1 = lambda x: USER_LIST.append(x)
v1 = func1('alex')
print(v1)#none
print(USER_LIST)#['alex']
# 練習題4
func1 = lambda x: x.split('l')
v1 = func1('alex')#splist的回傳值為‘l’切割后形成的串列,
print(v1)
['a', 'ex']
# 練習題5
func_list = [lambda x:x.strip(), lambda y:y+199,lambda x,y:x+y]
v1 = func_list[0]('alex ')
print(v1)#['a', 'ex']
v2 = func_list[1](100)
print(v2)#399
v3 = func_list[2](1,2)
print(v3)#3
- 內置函式
- 自定義函式
- 內置函式
- 其他
- len
- open
- range
- id
- type
- 輸入輸出
- input
- 強制轉換
- dict()
- list()
- tuple()
- int()
- str()
- bool()
- set()
- 數學相關
-
abs,絕對值
v = abs(-1)
print(v) -
float,轉換成浮點型(小數)
v = 55
v1 = float(55)
print(v1)
55.0 -
max,找到最大值
v = [1,2,311,21,3,]
result = max(v)
print(result) -
min,找最小值
v = [1,2,311,21,3,]
result = min(v)
print(result) -
sum,求和
v = [1,2,311,21,3,]
result = sum(v)
print(result) -
divmod,兩數相除的商和余數
a,b = divmod(1001,5)
print(a,b)
200,1
# 練習題 請通過分頁對資料進行展示
"""
要求:
每頁顯示10條資料
讓用戶輸入要查看的頁面:頁碼
"""USER_LIST = [] for i in range(1,836): temp = {'name':'你少妻-%s' %i,'email':'123%[email protected]' %i } USER_LIST.append(temp) # 資料總條數 total_count = len(USER_LIST) # 每頁顯示10條 per_page_count= 10 # 總頁碼數 max_page_num,a = divmod(total_count,per_page_count) if a>0: max_page_num += 1 while True: pager = int(input('要查看第幾頁:')) if pager < 1 or pager > max_page_num: print('頁碼不合法,必須是 1 ~ %s' %max_page_num ) else: """ # 第1頁:USER_LIST[0:10] -> 0123456789 # 第2頁:USER_LIST[10:20] # 第3頁:USER_LIST[20:30] ... """ start = (pager-1) * per_page_count end = pager * per_page_count data = USER_LIST[start:end] for item in data: print(item)
-
- 進制轉換相關
-
bin,將十進制轉化成二進制
num = 13
v1 = bin(num)
print(v1) -
oct,將十進制轉換成八進制
num = 8
v1 = oct(num)
print(v1) -
int,將其他進制轉化成十進制
# 二進制轉化成十進制
v1 = '0b1101'
result = int(v1,base=2)
print(result)# 八進制轉化成十進制 v1 = '0o1101' result = int(v1,base=8) print(result) # 十六進制轉化成十進制 v1 = '0x1101' result = int(v1,base=16) print(result) -
hex,將十進制轉換成十六進制
num = 16
v1 = hex(num)
print(v1) -
面試題
# 1位元組等于8位
# IP: 192.168.12.79 -> 001010010 . 001010010 . 001010010 . 001010010# 1. 請將 ip = "192.168.12.79" 中的每個十進制數轉換成二進制并通過,連接起來生成一個新的字串, ip = "192.168.12.79" ip_list = ip.split('.') # ['192','168','12','79'] result = [] for item in ip_list: result.append(bin(int(item))) print(','.join(result)) # 2. 請將 ip = "192.168.12.79" 中的每個十進制數轉換成二進制: # 0010100100001010010001010010001010010 -> 十進制的值, # 3232238671 方法1: ip = "192.168.12.79" ip_list = ip.split('.') result = [] for i in range(len(ip_list)): result.append('{:08b}'.format(int(ip_list[i]))) print(int(''.join(result),base=2)) 方法2: ip = "192.168.12.79" ip_list = ip.split('.') result = [] for i in range(len(ip_list)): result.append((bin(int(ip_list[i])))[2::]) for i in range(len(result)): n=len(result[i]) result[i]='0'*(8-n)+result[i] v=int(''.join(result),base=2) print(v) 方法3: ip = "192.168.12.79" ip_list = ip.split('.') result = [] for i in range(len(ip_list)): str = bin(int(ip_list[i]))[2::] n = len(bin(int(ip_list[i]))[2::]) result.append('0' * (8 - n) + str) v=''.join(result) print(int(v,base=2))
-
- 其他
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/41177.html
標籤:其他
