p2:千行代碼入門python

来源:https://www.cnblogs.com/anduinlee/archive/2017/12/30/8151144.html
-Advertisement-
Play Games

非原創,系轉載。 ...


非原創,系轉載。

   1 # _*_ coding: utf-8 _*_
   2 
   3 """類型和運算----類型和運算----類型和運算----類型和運算----類型和運算----類型和運算----類型和運算----類型和運算----類型和運算----類型和運算----類型和運算"""
   4 
   5 # -- 尋求幫助:
   6 dir(obj)  # 簡單的列出對象obj所包含的方法名稱,返回一個字元串列表
   7 help(obj.func)  # 查詢obj.func的具體介紹和用法
   8 
   9 # -- 測試類型的三種方法,推薦第三種
  10 if type(L) == type([]):
  11     print("L is list")
  12 if type(L) == list:
  13     print("L is list")
  14 if isinstance(L, list):
  15     print("L is list")
  16 
  17 # -- Python數據類型:哈希類型、不可哈希類型
  18 # 哈希類型,即在原地不能改變的變數類型,不可變類型。可利用hash函數查看其hash值,也可以作為字典的key
  19 "數字類型:int, float, decimal.Decimal, fractions.Fraction, complex"
  20 "字元串類型:str, bytes"
  21 "元組:tuple"
  22 "凍結集合:frozenset"
  23 "布爾類型:True, False"
  24 "None"
  25 # 不可hash類型:原地可變類型:list、dict和set。它們不可以作為字典的key。
  26 
  27 # -- 數字常量
  28 1234, -1234, 0, 999999999  # 整數
  29 1.23, 1., 3.14e-10, 4E210, 4.0e+210  # 浮點數
  30 0o177, 0x9ff, 0X9FF, 0b101010  # 八進位、十六進位、二進位數字
  31 3 + 4j, 3.0 + 4.0j, 3J  # 複數常量,也可以用complex(real, image)來創建
  32 hex(I), oct(I), bin(I)  # 將十進位數轉化為十六進位、八進位、二進位表示的“字元串”
  33 int(string, base)  # 將字元串轉化為整數,base為進位數
  34 # 2.x中,有兩種整數類型:一般整數(32位)和長整數(無窮精度)。可以用l或L結尾,迫使一般整數成為長整數
  35 float('inf'), float('-inf'), float('nan')  # 無窮大, 無窮小, 非數
  36 
  37 # -- 數字的表達式操作符
  38 yield x  # 生成器函數發送協議
  39 lambda args: expression  # 生成匿名函數
  40 x if y else z  # 三元選擇表達式
  41 x and y, x or y, not x  # 邏輯與、邏輯或、邏輯非
  42 x in y, x not in y  # 成員對象測試
  43 x is y, x is not y  # 對象實體測試
  44 x < y, x <= y, x > y, x >= y, x == y, x != y  # 大小比較,集合子集或超集值相等性操作符
  45 1 < a < 3  # Python中允許連續比較
  46 x | y, x & y, x ^ y  # 位或、位與、位異或
  47 x << y, x >> y  # 位操作:x左移、右移y位
  48 +, -, *, /, //, %, **  # 真除法、floor除法:返回不大於真除法結果的整數值、取餘、冪運算
  49 -x, +x, ~x  # 一元減法、識別、按位求補(取反)
  50 x[i], x[i:j:k]  # 索引、分片、調用
  51 int(3.14), float(3)  # 強制類型轉換
  52 
  53 # -- 整數可以利用bit_length函數測試所占的位數
  54 a = 1;
  55 a.bit_length()  # 1
  56 a = 1024;
  57 a.bit_length()  # 11
  58 
  59 # -- repr和str顯示格式的區別
  60 """
  61 repr格式:預設的交互模式回顯,產生的結果看起來它們就像是代碼。
  62 str格式:列印語句,轉化成一種對用戶更加友好的格式。
  63 """
  64 
  65 # -- 數字相關的模塊
  66 # math模塊
  67 # Decimal模塊:小數模塊
  68 import decimal
  69 from decimal import Decimal
  70 
  71 Decimal("0.01") + Decimal("0.02")  # 返回Decimal("0.03")
  72 decimal.getcontext().prec = 4  # 設置全局精度為4 即小數點後邊4位
  73 # Fraction模塊:分數模塊
  74 from fractions import Fraction
  75 
  76 x = Fraction(4, 6)  # 分數類型 4/6
  77 x = Fraction("0.25")  # 分數類型 1/4 接收字元串類型的參數
  78 
  79 # -- 集合set
  80 """
  81 set是一個無序不重覆元素集, 基本功能包括關係測試和消除重覆元素。
  82 set支持union(聯合), intersection(交), difference(差)和symmetric difference(對稱差集)等數學運算。
  83 set支持x in set, len(set), for x in set。
  84 set不記錄元素位置或者插入點, 因此不支持indexing, slicing, 或其它類序列的操作
  85 """
  86 s = set([3, 5, 9, 10])  # 創建一個數值集合,返回{3, 5, 9, 10}
  87 t = set("Hello")  # 創建一個唯一字元的集合返回{}
  88 a = t | s;
  89 t.union(s)  # t 和 s的並集
  90 b = t & s;
  91 t.intersection(s)  # t 和 s的交集
  92 c = t – s;
  93 t.difference(s)  # 求差集(項在t中, 但不在s中)
  94 d = t ^ s;
  95 t.symmetric_difference(s)  # 對稱差集(項在t或s中, 但不會同時出現在二者中)
  96 t.add('x');
  97 t.remove('H')  # 增加/刪除一個item
  98 s.update([10, 37, 42])  # 利用[......]更新s集合
  99 x in s, x not in s  # 集合中是否存在某個值
 100 s.issubset(t);
 101 s <= t  # 測試是否 s 中的每一個元素都在 t 中
 102 s.issuperset(t);
 103 s >= t  # 測試是否 t 中的每一個元素都在 s 中
 104 s.copy();
 105 s.discard(x);  # 刪除s中x
 106 s.clear()  # 清空s
 107 {x ** 2 for x in [1, 2, 3, 4]}  # 集合解析,結果:{16, 1, 4, 9}
 108 {x for x in 'spam'}  # 集合解析,結果:{'a', 'p', 's', 'm'}
 109 
 110 # -- 集合frozenset,不可變對象
 111 """
 112 set是可變對象,即不存在hash值,不能作為字典的鍵值。同樣的還有list等(tuple是可以作為字典key的)
 113 frozenset是不可變對象,即存在hash值,可作為字典的鍵值
 114 frozenset對象沒有add、remove等方法,但有union/intersection/difference等方法
 115 """
 116 a = set([1, 2, 3])
 117 b = set()
 118 b.add(a)  # error: set是不可哈希類型
 119 b.add(frozenset(a))  # ok,將set變為frozenset,可哈希
 120 
 121 # -- 布爾類型bool
 122 type(True)  # 返回<class 'bool'>
 123 isinstance(False, int)  # bool類型屬於整型,所以返回True
 124 True == 1;
 125 True is 1  # 輸出(True, False)
 126 
 127 # -- 動態類型簡介
 128 """
 129 變數名通過引用,指向對象。
 130 Python中的“類型”屬於對象,而不是變數,每個對象都包含有頭部信息,比如"類型標示符" "引用計數器"等
 131 """
 132 # 共用引用及在原處修改:對於可變對象,要註意儘量不要共用引用!
 133 # 共用引用和相等測試:
 134 L = [1], M = [1], L is M  # 返回False
 135 L = M = [1, 2, 3], L is M  # 返回True,共用引用
 136 # 增強賦值和共用引用:普通+號會生成新的對象,而增強賦值+=會在原處修改
 137 L = M = [1, 2]
 138 L = L + [3, 4]  # L = [1, 2, 3, 4], M = [1, 2]
 139 L += [3, 4]  # L = [1, 2, 3, 4], M = [1, 2, 3, 4]
 140 
 141 # -- 常見字元串常量和表達式
 142 S = ''  # 空字元串
 143 S = "spam’s"  # 雙引號和單引號相同
 144 S = "s\np\ta\x00m"  # 轉義字元
 145 S = """spam"""  # 三重引號字元串,一般用於函數說明
 146 S = r'\temp'  # Raw字元串,不會進行轉義,抑制轉義
 147 S = b'Spam'  # Python3中的位元組字元串
 148 S = u'spam'  # Python2.6中的Unicode字元串
 149 s1 + s2, s1 * 3, s[i], s[i:j], len(s)  # 字元串操作
 150 'a %s parrot' % 'kind'  # 字元串格式化表達式
 151 'a {1} {0} parrot'.format('kind', 'red')  # 字元串格式化方法
 152 for x in s: print(x)  # 字元串迭代,成員關係
 153 [x * 2 for x in s]  # 字元串列表解析
 154 ','.join(['a', 'b', 'c'])  # 字元串輸出,結果:a,b,c
 155 
 156 # -- 內置str處理函數:
 157 str1 = "stringobject"
 158 str1.upper();
 159 str1.lower();
 160 str1.swapcase();
 161 str1.capitalize();
 162 str1.title()  # 全部大寫,全部小寫、大小寫轉換,首字母大寫,每個單詞的首字母都大寫
 163 str1.ljust(width)  # 獲取固定長度,左對齊,右邊不夠用空格補齊
 164 str1.rjust(width)  # 獲取固定長度,右對齊,左邊不夠用空格補齊
 165 str1.center(width)  # 獲取固定長度,中間對齊,兩邊不夠用空格補齊
 166 str1.zfill(width)  # 獲取固定長度,右對齊,左邊不足用0補齊
 167 str1.find('t', start, end)  # 查找字元串,可以指定起始及結束位置搜索
 168 str1.rfind('t')  # 從右邊開始查找字元串
 169 str1.count('t')  # 查找字元串出現的次數
 170 # 上面所有方法都可用index代替,不同的是使用index查找不到會拋異常,而find返回-1
 171 str1.replace('old', 'new')  # 替換函數,替換old為new,參數中可以指定maxReplaceTimes,即替換指定次數的old為new
 172 str1.strip();  # 預設刪除空白符
 173 str1.strip('d');  # 刪除str1字元串中開頭、結尾處,位於 d 刪除序列的字元
 174 str1.lstrip();
 175 str1.lstrip('d');  # 刪除str1字元串中開頭處,位於 d 刪除序列的字元
 176 str1.rstrip();
 177 str1.rstrip('d')  # 刪除str1字元串中結尾處,位於 d 刪除序列的字元
 178 str1.startswith('start')  # 是否以start開頭
 179 str1.endswith('end')  # 是否以end結尾
 180 str1.isalnum();
 181 str1.isalpha();
 182 str1.isdigit();
 183 str1.islower();
 184 str1.isupper()  # 判斷字元串是否全為字元、數字、小寫、大寫
 185 
 186 # -- 三重引號編寫多行字元串塊,並且在代碼折行處嵌入換行字元\n
 187 mantra = """hello world
 188             hello python
 189             hello my friend"""
 190 # mantra為"""hello world \n hello python \n hello my friend"""
 191 
 192 # -- 索引和分片:
 193 S[0], S[len(S)–1], S[-1]  # 索引
 194 S[1:3], S[1:], S[:-1], S[1:10:2]  # 分片,第三個參數指定步長,如`S[1:10:2]`是從1位到10位沒隔2位獲取一個字元。
 195 
 196 # -- 字元串轉換工具:
 197 int('42'), str(42)  # 返回(42, '42')
 198 float('4.13'), str(4.13)  # 返回(4.13, '4.13')
 199 ord('s'), chr(115)  # 返回(115, 's')
 200 int('1001', 2)  # 將字元串作為二進位數字,轉化為數字,返回9
 201 bin(13), oct(13), hex(13)  # 將整數轉化為二進位/八進位/十六進位字元串,返回('0b1101', '015', '0xd')
 202 
 203 # -- 另類字元串連接
 204 name = "wang" "hong"  # 單行,name = "wanghong"
 205 name = "wang" \
 206        "hong"  # 多行,name = "wanghong"
 207 
 208 # -- Python中的字元串格式化實現1--字元串格式化表達式
 209 """
 210 基於C語言的'print'模型,並且在大多數的現有的語言中使用。
 211 通用結構:%[(name)][flag][width].[precision]typecode
 212 """
 213 "this is %d %s bird" % (1, 'dead')  # 一般的格式化表達式
 214 "%s---%s---%s" % (42, 3.14, [1, 2, 3])  # 字元串輸出:'42---3.14---[1, 2, 3]'
 215 "%d...%6d...%-6d...%06d" % (1234, 1234, 1234, 1234)  # 對齊方式及填充:"1234...  1234...1234  ...001234"
 216 x = 1.23456789
 217 "%e | %f | %g" % (x, x, x)  # 對齊方式:"1.234568e+00 | 1.234568 | 1.23457"
 218 "%6.2f*%-6.2f*%06.2f*%+6.2f" % (x, x, x, x)  # 對齊方式:'  1.23*1.23  *001.23* +1.23'
 219 "%(name1)d---%(name2)s" % {"name1": 23, "name2": "value2"}  # 基於字典的格式化表達式
 220 "%(name)s is %(age)d" % vars()  # vars()函數調用返回一個字典,包含了所有本函數調用時存在的變數
 221 
 222 # -- Python中的字元串格式化實現2--字元串格式化調用方法
 223 # 普通調用
 224 "{0}, {1} and {2}".format('spam', 'ham', 'eggs')  # 基於位置的調用
 225 "{motto} and {pork}".format(motto='spam', pork='ham')  # 基於Key的調用
 226 "{motto} and {0}".format('ham', motto='spam')  # 混合調用
 227 # 添加鍵 屬性 偏移量 (import sys)
 228 "my {1[spam]} runs {0.platform}".format(sys, {'spam': 'laptop'})  # 基於位置的鍵和屬性
 229 "{config[spam]} {sys.platform}".format(sys=sys, config={'spam': 'laptop'})  # 基於Key的鍵和屬性
 230 "first = {0[0]}, second = {0[1]}".format(['A', 'B', 'C'])  # 基於位置的偏移量
 231 # 具體格式化
 232 "{0:e}, {1:.3e}, {2:g}".format(3.14159, 3.14159, 3.14159)  # 輸出'3.141590e+00, 3.142e+00, 3.14159'
 233 "{fieldname:format_spec}".format(......)
 234 # 說明:
 235 """
 236     fieldname是指定參數的一個數字或關鍵字, 後邊可跟可選的".name"或"[index]"成分引用
 237     format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]
 238     fill        ::=  <any character>              #填充字元
 239     align       ::=  "<" | ">" | "=" | "^"        #對齊方式
 240     sign        ::=  "+" | "-" | " "              #符號說明
 241     width       ::=  integer                      #字元串寬度
 242     precision   ::=  integer                      #浮點數精度
 243     type        ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
 244 """
 245 # 例子:
 246 '={0:10} = {1:10}'.format('spam', 123.456)  # 輸出'=spam       =    123.456'
 247 '={0:>10}='.format('test')  # 輸出'=      test='
 248 '={0:<10}='.format('test')  # 輸出'=test      ='
 249 '={0:^10}='.format('test')  # 輸出'=   test   ='
 250 '{0:X}, {1:o}, {2:b}'.format(255, 255, 255)  # 輸出'FF, 377, 11111111'
 251 'My name is {0:{1}}.'.format('Fred', 8)  # 輸出'My name is Fred    .'  動態指定參數
 252 
 253 # -- 常用列表常量和操作
 254 L = [[1, 2], 'string', {}]  # 嵌套列表
 255 L = list('spam')  # 列表初始化
 256 L = list(range(0, 4))  # 列表初始化
 257 list(map(ord, 'spam'))  # 列表解析
 258 len(L)  # 求列表長度
 259 L.count(value)  # 求列表中某個值的個數
 260 L.append(obj)  # 向列表的尾部添加數據,比如append(2),添加元素2
 261 L.insert(index, obj)  # 向列表的指定index位置添加數據,index及其之後的數據後移
 262 L.extend(interable)  # 通過添加iterable中的元素來擴展列表,比如extend([2]),添加元素2,註意和append的區別
 263 L.index(value, [start, [stop]])  # 返回列表中值value的第一個索引
 264 L.pop([index])  # 刪除並返回index處的元素,預設為刪除並返回最後一個元素
 265 L.remove(value)  # 刪除列表中的value值,只刪除第一次出現的value的值
 266 L.reverse()  # 反轉列表
 267 L.sort(cmp=None, key=None, reverse=False)  # 排序列表
 268 a = [1, 2, 3], b = a[10:]  # 註意,這裡不會引發IndexError異常,只會返回一個空的列表[]
 269 a = [], a += [1]  # 這裡實在原有列表的基礎上進行操作,即列表的id沒有改變
 270 a = [], a = a + [1]  # 這裡最後的a要構建一個新的列表,即a的id發生了變化
 271 
 272 # -- 用切片來刪除序列的某一段
 273 a = [1, 2, 3, 4, 5, 6, 7]
 274 a[1:4] = []  # a = [1, 5, 6, 7]
 275 a = [0, 1, 2, 3, 4, 5, 6, 7]
 276 del a[::2]  # 去除偶數項(偶數索引的),a = [1, 3, 5, 7]
 277 
 278 # -- 常用字典常量和操作
 279 D = {}
 280 D = {'spam': 2, 'tol': {'ham': 1}}  # 嵌套字典
 281 D = dict.fromkeys(['s', 'd'], 8)  # {'s': 8, 'd': 8}
 282 D = dict(name='tom', age=12)  # {'age': 12, 'name': 'tom'}
 283 D = dict([('name', 'tom'), ('age', 12)])  # {'age': 12, 'name': 'tom'}
 284 D = dict(zip(['name', 'age'], ['tom', 12]))  # {'age': 12, 'name': 'tom'}
 285 D.keys();
 286 D.values();
 287 D.items()  # 字典鍵、值以及鍵值對
 288 D.get(key, default)  # get函數
 289 D.update(D_other)  # 合併字典,如果存在相同的鍵值,D_other的數據會覆蓋掉D的數據
 290 D.pop(key, [D])  # 刪除字典中鍵值為key的項,返回鍵值為key的值,如果不存在,返回預設值D,否則異常
 291 D.popitem()  # pop字典中隨機的一項(一個鍵值對)
 292 D.setdefault(k[, d])  # 設置D中某一項的預設值。如果k存在,則返回D[k],否則設置D[k]=d,同時返回D[k]。
 293 del D  # 刪除字典
 294 del D['key']  # 刪除字典的某一項
 295 if key in D:   if
 296 key not in D:  # 測試字典鍵是否存在
 297 # 字典註意事項:(1)對新索引賦值會添加一項(2)字典鍵不一定非得是字元串,也可以為任何的不可變對象
 298 # 不可變對象:調用對象自身的任意方法,也不會改變該對象自身的內容,這些方法會創建新的對象並返回。
 299 # 字元串、整數、tuple都是不可變對象,dict、set、list都是可變對象
 300 D[(1, 2, 3)] = 2  # tuple作為字典的key
 301 
 302 # -- 字典解析
 303 D = {k: 8 for k in ['s', 'd']}  # {'s': 8, 'd': 8}
 304 D = {k: v for (k, v) in zip(['name', 'age'], ['tom', 12])}  # {'age': 12, 'name': tom}
 305 
 306 
 307 # -- 字典的特殊方法__missing__:當查找找不到key時,會執行該方法
 308 class Dict(dict):
 309     def __missing__(self, key):
 310         self[key] = []
 311         return self[key]
 312 
 313 
 314 dct = dict()
 315 dct["foo"].append(1)  # 這有點類似於collections.defalutdict
 316 dct["foo"]  # [1]
 317 
 318 # -- 元組和列表的唯一區別在於元組是不可變對象,列表是可變對象
 319 a = [1, 2, 3]  # a[1] = 0, OK
 320 a = (1, 2, 3)  # a[1] = 0, Error
 321 a = ([1, 2])  # a[0][1] = 0, OK
 322 a = [(1, 2)]  # a[0][1] = 0, Error
 323 
 324 # -- 元組的特殊語法: 逗號和圓括弧
 325 D = (12)  # 此時D為一個整數 即D = 12
 326 D = (12,)  # 此時D為一個元組 即D = (12, )
 327 
 328 # -- 文件基本操作
 329 output = open(r'C:\spam', 'w')  # 打開輸出文件,用於寫
 330 input = open('data', 'r')  # 打開輸入文件,用於讀。打開的方式可以為'w', 'r', 'a', 'wb', 'rb', 'ab'等
 331 fp.read([size])  # size為讀取的長度,以byte為單位
 332 fp.readline([size])  # 讀一行,如果定義了size,有可能返回的只是一行的一部分
 333 fp.readlines([size])  # 把文件每一行作為一個list的一個成員,並返回這個list。其實它的內部是通過迴圈調用readline()來實現的。如果提供size參數,size是表示讀取內容的總長。
 334 fp.readable()  # 是否可讀
 335 fp.write(str)  # 把str寫到文件中,write()並不會在str後加上一個換行符
 336 fp.writelines(seq)  # 把seq的內容全部寫到文件中(多行一次性寫入)
 337 fp.writeable()  # 是否可寫
 338 fp.close()  # 關閉文件。
 339 fp.flush()  # 把緩衝區的內容寫入硬碟
 340 fp.fileno()  # 返回一個長整型的”文件標簽“
 341 fp.isatty()  # 文件是否是一個終端設備文件(unix系統中的)
 342 fp.tell()  # 返迴文件操作標記的當前位置,以文件的開頭為原點
 343 fp.next()  # 返回下一行,並將文件操作標記位移到下一行。把一個file用於for … in file這樣的語句時,就是調用next()函數來實現遍歷的。
 344 fp.seek(offset[, whence])  # 將文件打開操作標記移到offset的位置。whence為0表示從頭開始計算,1表示以當前位置為原點計算。2表示以文件末尾為原點進行計算。
	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • C 語言的 static 關鍵字有三種(具體來說是兩種)用途: 1. 靜態局部變數:用於函數體內部修飾變數,這種變數的生存期長於該函數。 要明白這個用法,我們首先要瞭解c/c++的記憶體分佈,以及static所在的區間。 對於一個完整的程式,在記憶體中的分佈情況如下圖: 1.棧區: 由編譯器自動分配釋放 ...
  • 1排版 1 1相對獨立的程式塊之間、變數說明之後必須加空行。 示例:如下例子不符合規範。 if (!valid_ni(ni)) { ... // program code } repssn_ind = ssn_data[index].repssn_index; repssn_ni = ssn_dat ...
  • 本文主要介紹Spring中, 1 Bean 的 init-method 和 destroy-method 2 集合類型的裝配 3 註解方式裝配 4 以自動掃描把組件納入spring容器中管理 5 代理模式 一、Bean 的 init-method 和 destroy-method 以前在學Servl ...
  • 1.JDK API中RandomAccessFile類的描述 此類的實例支持對隨機訪問文件的讀取和寫入。隨機訪問文件的行為類似存儲在文件系統中的一個大型 byte 數組。存在指向該隱含數組的游標或索引,稱為文件指針;輸入操作從文件指針開始讀取位元組,並隨著對位元組的讀取而前移此文件指針。如果隨機訪問文件 ...
  • 字元流按字元個數輸入、輸出數據。 1.Reader類和FileReader類 Reader類是字元輸入流的超類,FileReader類是讀取字元的便捷類,此處的便捷是相對於其父類(另一個字元輸入流)InputStreamReader而言的。 read()每單字元讀取: read(char[] c)讀 ...
  • 概述 既然決定把視頻上老師講的實戰都自己動手實現一遍,那麼就先把最好大學排名這個實例自己寫一遍。看視頻的時候挺輕鬆的,但是到自己動手的時候才知道不容易,寫這個程式遇到兩個比較棘手的問題,一個是如何從網頁中提取出自己想要的信息,另一個是信息以什麼樣的形式保存並展示出來。其實幾乎所有的爬蟲都會遇到這兩個 ...
  • ['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildPr ...
  • 1 class Person(): 2 def __init__(self, name): 3 self.name = name 4 5 6 def print_name(self): 7 print(self.name) 8 9 p = Person('Li') 10 import types 1... ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...